0

私はautosuggestフィールドに取り組んでおり、すでに機能しています。私が今やろうとしている唯一のことは、検索フィールドの下のリストにあるデータの出力を制限することです。誰かがそれを行う方法を手伝ってもらえますか? すでにいくつかの方法を試しましたが、エラーに終わりました。だから私がしようとしているのは、データベースから引き出される結果の量を制限することです. 私はphpでこれをやってみました(パフォーマンスの点で優れていると思いますよね?)。すでに正常に動作するコードは次のとおりです。

<?php
require_once 'connect.php';

if (isset($_POST['search_term']) == true && empty ($_POST['search_term']) == false) {
    $search_term = mysql_real_escape_string ($_POST['search_term']);
    $query = mysql_query ("SELECT `word` FROM `datalist` WHERE `word` LIKE '$search_term%'");
    while (($row = mysql_fetch_assoc($query)) !==false) {
        echo '<li>', $row['word'], '</li>';
    }   
}
?>

私は専門家ではないので、詳しく教えていただけると助かります...

4

2 に答える 2

1

クエリで制限できます。すべてを取得して後で結果をフィルタリングするよりも、データベースから取得するデータの量を制限することをお勧めします。MySQL は、これらのクエリをすばやく実行するように構築されているため、有利に使用してください。

mysql_query ("SELECT `word` FROM `datalist` WHERE `word` LIKE '$search_term%' LIMIT 5");

ただし、必要に応じて for ループでフェッチすることにより、php で実行できます。

$limit = 5 // Make limit whatever you want
// Make sure you have enough results to fetch
if(mysql_num_rows($query) < $limit)
   $limit = mysql_num_rows($query);

for($i = 0; $i < $limit; $i++){
   $row = mysql_fetch_assoc($query);
   echo '<li>', $row['word'], '</li>';
}
于 2013-06-22T20:27:39.233 に答える
0

最も簡単な方法は、SQL クエリを更新して limit 句を追加することです。したがって、最初の 10 件の結果のみが必要な場合は、次のようにします。

SELECT `word` 
FROM `datalist` 
WHERE `word` 
LIKE '$search_term%'
LIMIT 10;

クエリを変更せずに php でそれを行うこともできますが、必要なものをデータベースから取得するだけで最も簡単であることがわかりました。

ところで、古いmysql コネクタを使用しています。この拡張モジュールは PHP 5.5.0 で非推奨になり、将来的に削除される予定です。代わりに、MySQLiまたはPDO_MySQL拡張機能を使用する必要があります。

于 2013-06-22T20:28:53.120 に答える