gpt4 book ai didi

php - 过于具体的 mysql 查询不起作用

转载 作者:太空宇宙 更新时间:2023-11-03 10:30:26 25 4
gpt4 key购买 nike

我写了一个查询,根据当前 id 的标签查找相似的 id,很像亚马逊,你也会喜欢。问题是,在我的示例中,我想从该搜索中排除 bookid 30。

这是我的查询:

注意:$similar 基本上是一个充满标签的字符串,标签由一些“like %item% or”组成

$query = "SELECT * FROM books
WHERE bookid !=30
AND {$similar}
AND visible ='1'
AND level ='2'
LIMIT 3";

不起作用的部分是 bookid!= 我试过 IS NOT、<> 重新排序以及我能找到的其他内容。这个查询仍然有效它输出三行但仍然包括 bookid 30

有人能解释一下这是怎么回事吗?我的查询是否变得过于复杂并且需要重组?

我想到的一个糟糕的选择是限制 4 个项目,将其发送到 while 循环以获取每一行并排除我不需要的 bookid。当我知道它可以在查询中完成时,这似乎毫无意义。

我通过重建查询和 $similar 字符串解决了这个问题之前

SELECT * FROM books WHERE bookid !=30 AND tags LIKE '%one%' OR tags LIKE '% two%' OR tags LIKE '% three%' AND visible ='1' AND level ='2' LIMIT 3

之后

SELECT * FROM books WHERE bookid !=30 AND (bookid!=30 AND tags LIKE '%one%') OR (bookid!=30 AND tags LIKE '% two%') OR (bookid!=30 AND tags LIKE '% three%') AND visible ='1' AND level ='2' LIMIT 3

我确实注意到一件事很奇怪,它是 bookid!= 仅当开头和每个 like 之间有一个时才有效,或者...我尝试交换每个,查询将无法运行,但当前字符串工作正常!

谢谢,

最佳答案

确保您的 $similar 变量包含在括号中。

如果中间有一个OR,则计算为

(bookid != 30 AND item like '%item1%') OR (item like '%item2%' AND visible = 1 AND level= 2)

代替

bookid != 30 AND (item like '%item1%' OR item like '%item2%') AND visible = 1 AND level= 2

关于php - 过于具体的 mysql 查询不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1066594/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com