-2

カート内のアイテムの検索クエリを作成しています。問題は、期待した結果が得られないことです。コードは次のとおりです。

$here = explode(" ",$sarc);
$query = "SELECT * FROM 126link WHERE (";
foreach($here as $each){
    $i++;
    if($i==1)
        $query.="title LIKE '%$each%') AND loginid = '$myid' ";
    else
        $query.="OR title LIKE '%$each%') AND loginid = '$myid' ";
}
$ritw = mysql_query($query);
$sup = @mysql_num_rows($ritw);
$query.="ORDER BY idl LIMIT 40";
$query = mysql_query($query);
$numrows = @mysql_num_rows($query);

このクエリに AND 条件を追加して if を検索したいのですがidcolumn(in table) = '$id'、どこに置くべきかわかりません。

上記のコードはすべてのカートの結果を表示します。私はそれを 1 つに制限しようとしています。

4

4 に答える 4

1

操作の順序をよりよく理解する必要があります。

http://dev.mysql.com/doc/refman/5.5/en/operator-precedence.html

ANDは前に評価されるため、条件ORのセット全体を括弧で囲むことなく、id フィルターと一緒ORに最後のLIKE条件のみを評価することになり、OR 条件を満たす他のすべての行を取得します。

演算子の優先順位に関係なく、コードを読み取ろうとしている人 (自分自身を含む) にとってより意味のある場所に操作を論理的にグループ化することをお勧めします。

したがって、WHERE 条件は次のようになります。

WHERE (title LIKE %value% OR title LIKE %other value% ...) AND loginid = ?
于 2013-01-24T23:27:50.133 に答える
0

このコードは機能するはずです。

$here = explode(" ",$sarc);
$query = "SELECT * FROM 126link WHERE loginid = '$myid'  AND title '".implode('|',$here)."';" ;

$ritw = mysql_query($query);
$sup = @mysql_num_rows($ritw);
$query.="ORDER BY idl LIMIT 40";
$query = mysql_query($query);
$numrows = @mysql_num_rows($query);

REGEXP については、http://www.go4expert.com/forums/showthread.php? t=2337 にアクセスしてください。

正規表現については、http://www.regular-expressions.info/ をご覧ください。

于 2013-01-24T23:57:47.233 に答える
0

これを行うより速い方法:

$here = explode(" ",$sarc);
$id=$_SESSION['id'];
$query  = "SELECT * FROM table WHERE title REGEXP '" . implode('|',$here) . "'";
$query .= " AND something IN ($id)";

これについて別の質問があります

Mysql Like 複数の値

于 2013-01-24T23:23:19.220 に答える
0

最後に追加?

$id=$_SESSION['id'];
$query = "SELECT * FROM table WHERE ";
foreach($here as $each){
    $i++;
    if($i==1)
        $query.="title LIKE '%$each%' ";
    else
        $query.="OR title LIKE '%$each%' ;
}
$query .= " AND something IN ($id)";

より良い回答が必要な場合は、サンプル データと目的の結果を含むテーブル構造を提供する必要があります。

于 2013-01-24T23:06:51.307 に答える