1

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 未満の一部の本が完全に表示されないことです。

ヒント: アラビア語のすべての文字列

4

0 に答える 0