0

SO 私は mysql_fetch_array を使用して mysql で動作する Jquery オートコンプリートを持っています。

行のすべての列を返すのに少し問題があります。これまでのところ、テーブルの名前列でリクエストが行われ、行から名前列が返されます。

私の「イベント」テーブルは次のようになります。

name     event    price    date    color    drinks

私がやりたいのは、「名前」、「イベント」、「日付」、「色」の列を検索することですが、いずれかの列で一致が見つかった場合、それらの列からの結果を特定の順序で表示します。

したがって、「イベント」テーブルに次のデータが含まれている場合

name     event       price     date             color         drinks
Helen    Topmark      31       03/02/2013       red            brandy
Gregg    maxpower     27       01/02/2013       red            whiskey

誰かが「red helen」を検索すると、オートコンプリートは次のように入力されます

Helen Topmark red 03/02/2013

また、誰かが「赤」を検索した場合は、日付を優先したいと思います

Gregg maxpower red 01/02/2013
Helen Topmark red 03/02/2013

ここに私が現在持っているコードがあります

$req = "SELECT name "
    ."FROM events "
    ."WHERE name LIKE '%".$_REQUEST['term']."%' "; 

$query = mysql_query($req);

while($row = mysql_fetch_array($query))
{
    $results[] = array('label' => $row['name']);
}

echo json_encode($results);

お時間をいただき、誠にありがとうございました。

4

2 に答える 2

0

できるよ:

$req = "SELECT name, event, color, date FROM events WHERE (name LIKE '%".$_REQUEST['term']."%' OR event LIKE '%".$_REQUEST['term']."%' OR date LIKE '%".$_REQUEST['term']."%' OR color LIKE '%".$_REQUEST['term']."%')";

そしてあなたの while ループ:

while($row = mysql_fetch_array($query))
{
    echo $row['name'] . ' ' . $row['event'] . ' ' . $row['color'] . ' ' . $row['date']; 
}

方向性を示すだけで、まだSQLインジェクションに対してオープンです。

于 2013-01-10T13:51:16.920 に答える
0

以下のようにクエリを更新します。

$search  =  $_REQUEST['term'];
$pieces = explode(" ", $search);
$in = "";
foreach($pieces as $val) {
    $in = "'".$val."' IN (name,color) AND ";
    if(end($pieces) === $val)
        $in = "'".$val."' IN (name,color)";
}

注: mysql_query() これらの関数は、PHP5.3 から廃止されました。

于 2013-01-10T13:57:46.697 に答える