left ステートメントと Locate を使用して、データベース内の一部のフィールドの部分文字列を取得して実行しました (さらに表示)。正常に動作していますが、正常に動作しない場合があります。
これはコードです:
function split_field($table = "d_book", $field = "bo_about", $length = 195) {
$tbl_field = "TRIM(".$table.".".$field.")";
$sql = "CONCAT(LEFT({$tbl_field}, IF(LENGTH({$tbl_field}) > {$length}, LOCATE(' ', {$tbl_field}, {$length}), {$length})),
IF(LENGTH({$tbl_field}) > {$length}, '...', ''))
AS `{$field}`";
return $sql;
}
$sql = "SELECT `bo_price`,`bo_id`, `bo_au_id`,`bo_name`,";
$sql .= split_field();
$sql .=",`bo_cover_img`, `bo_num_pages`, `d_book`.`bo_sec_id`, `d_section`.`sec_id`, `d_author`.`au_id`, `d_author`.`au_name`
FROM (`d_book`)
JOIN `d_section` ON `d_section`.`sec_id`=`d_book`.`bo_sec_id`
JOIN `d_author` ON `d_author`.`au_id`=`d_book`.`bo_au_id`
WHERE `d_book`.`bo_state` = '1'";
$sql .= " ORDER BY `d_book`.`bo_ord` DESC LIMIT $start_limit,20";
問題は、文字列が 195 未満の一部の本が完全に表示されないことです。
ヒント: アラビア語のすべての文字列