-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',但我不知道把它放在哪里。

上面的代码显示了所有购物车的结果,我试图将其限制为一个。

4

4 回答 4

1

您需要更好地理解操作的顺序:

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

AND之前进行了评估,OR因此在不提供整个条件集的括号的OR情况下,您最终将只评估最后一个LIKE条件和 id 过滤器,然后让所有其他行满足您的 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

加在最后?

$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 回答
0

更快的方法:

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

对此有另一个问题

Mysql 喜欢多个值

于 2013-01-24T23:23:19.220 回答