Blog Posts » PHP & MySQL » Optimasi Read More

Optimasi Read More

Jika ingin mengambil sebagian data teks atau posting di MySQL biasanya kita menggunakan PHP substr untuk memotongnya. Namun alangkah baiknya jika kita memotongnya sejak proses query SELECT. Karena data yang diambil akan lebih sedikit untuk ditransfer ke klien (PHP).

Jika query standar:
[Textarea][RAW][Download]

  1. SELECT judul, posting FROM tabel_posting LIMIT 10;


Query yang ter-optimasi:
[Textarea][RAW][Download]

  1. SELECT judul, LEFT(posting, 100) AS posting FROM tabel_posting LIMIT 10;


Contoh variasi kodenya, tentunya tidak mutlak harus dipakai:
[Textarea][RAW][Download]

  1. $max_chars = 100;
  2. $readselengkapnya = '[readmore]'; // Suffix ini hanya akan muncul jika posting > 100
  3. $sql = mysql_query("SELECT id, judul, IF(CHAR_LENGTH(LEFT(posting, $max_chars+1))>$max_charsCONCAT(LEFT(posting, $max_chars), '$readselengkapnya'), posting) AS posting FROM tabel_posting LIMIT 10");
  4. while($row = mysql_fetch_array($sql)) {
  5. $id = $row['id'];
  6. $judul = $row['judul'];
  7. $posting = $row['posting'];
  8. if (substr($posting, -strlen($readselengkapnya)) == $readselengkapnya) { // Jika ada [readmore] di belakang, replace dengan link ..selengkapnya
  9. $posting = str_replace($readselengkapnya, '<a href="/posting.php?id='.$id.'">..selengkapnya</a>', $posting);
  10. }
  11. // blabla
  12. echo htmlspecialchars($posting);
  13. }


Jika menginginkan pemotongan 'sempurna' yaitu dengan tidak memotong ditengah-tengah kata, ganti query diatas dengan:
[Textarea][RAW][Download]

  1. SELECT id, judul, IF(CHAR_LENGTH(LEFT(posting, $max_chars+1))>$max_charsCONCAT(SUBSTRING(posting, 1, $max_chars-INSTR(REVERSE(LEFT(posting, $max_chars)), ' ')), '$readselengkapnya'), posting) AS posting FROM tabel_posting LIMIT 10;


Pemotongan akan dilakukan pada spasi.. :)

Update: Fungsi mysql sudah ditinggalkan oleh PHP. Silahkan lanjut baca mysqli_connect dan mysqli_query.

(admin)