mysql查询,条件多,结果有限

mlmc2os5  于 2021-06-21  发布在  Mysql
关注(0)|答案(1)|浏览(288)

我有一个php脚本,可以从mysql数据库创建rss提要。数据库中的记录为期三年。
我一直在修改mysql查询,在这里搜索修复问题之后,至少现在返回了结果,但是不管我为查询中的记录数设置了多少限制,它只返回了几个月的结果。
以下是查询:

$mysqli->query("
SELECT * 
  FROM news 
 WHERE (`title` LIKE '%red%' 
      OR `title` LIKE '%green%' 
      OR `title` LIKE '%blue%' 
      OR `title` LIKE '%yellow%' 
      OR `title` LIKE '%black%') 
   AND published = 1
   AND category_id != 9
   AND category_id != 10
 ORDER 
    BY id DESC LIMIT $news_number")

$news\u number设置为200,但我尝试了更高的数字,结果的数量没有变化。
因此,作为一个例子,如果我运行上面的查询,我会得到一些结果,但少于限制,它会在11月初停止。
然而,如果我做一个喜欢的搜索只使用一个词,即蓝色,那么它会带来更多的结果回到过去一年。
我的问题是mysql查询看起来是否正确-已经尝试了很多方法,但似乎没有得到它的权利,尽管花费了相当多的时间。
提前谢谢
补充:
因此,为了澄清我是否以运行此查询为例,返回了200个结果:

$mysqli->query("SELECT * FROM news WHERE `title` LIKE '%red%' AND
    published='1' AND category_id !='9' AND category_id !='10'
    ORDER BY id DESC LIMIT $news_number")

但如果我在or部分中包含红色的情况下运行此查询,则会得到35个结果:

$mysqli->query("SELECT * FROM news WHERE (`title` LIKE '%red%' OR `title` LIKE '%green%' OR
    `title` LIKE '%blue%' OR `title` LIKE '%yellow%' OR `title` LIKE '%black%') AND
    published='1' AND category_id !='9' AND category_id !='10'
    ORDER BY id DESC LIMIT $news_number")

在第二个问题上,我希望得到超过200个结果,除非代码是错误的??
感谢那些提出建议的人,我们更新了以下结果:
为了进行flynorc提到的测试,我更改了查询,使其如下所示:

("SELECT * FROM news WHERE title REGEXP 'red|green|blue|yellow|black' AND published='1' AND category_id !='9' AND category_id !='10' ORDER BY id DESC  LIMIT $news_number")

结果是,它返回的结果数量与我的相同(上面最初的第一个),返回的结果从11月开始停止。
所以我取消了$news\u数字的限制,结果的数量没有改变。
所以我又把查询改成这样:

("SELECT * FROM news WHERE title REGEXP 'red|green' AND published='1' AND category_id !='9' AND category_id !='10' ORDER BY id DESC")

它带来了更多的结果,记录在今年3月停止-仍然不是整个数据库,尽管它有记录可以追溯到三年前。
为了澄清标题字段-这包含有完整单词的标题,我正在尝试匹配,并且有很多标题应该匹配。我的意思是我并不是真的在寻找像reddish这样的词,我只是想把它和red这样的词搭配起来
抱歉,如果我的解释不精彩-这让我真的很困惑。在这个阶段,我能看到的获得更多结果的唯一方法是运行两个脚本,将查询分解为一个较短的脚本。

xxhby3vn

xxhby3vn1#

查询中的问题是曲线大括号,您还需要为其他查询中的类似条件添加它们。
下面两个查询看起来很相似,但仔细看,我为其中一个添加了与您类似的曲线括号(),因此它们将产生不同的输出。第二个是正确的。
因此,当使用like条件将它们与sql查询中的其他条件隔离开来时,我们需要使用曲线大括号。

SELECT * FROM test WHERE str LIKE '%red%' OR  str LIKE '%green%' OR str LIKE '%blue%' OR str LIKE '%yellow%' OR str LIKE '%black%' AND id=1;

SELECT * FROM test WHERE (str LIKE '%red%' OR  str LIKE '%green%' OR str LIKE '%blue%' OR str LIKE '%yellow%' OR str LIKE '%black%') AND id=1;

sql小提琴:http://sqlfiddle.com/#!9/d262b8/2号
希望这有帮助。

相关问题