当前位置:Gxlcms > PHP教程 > mysql用了notin为什么查不出数据。

mysql用了notin为什么查不出数据。

时间:2021-07-01 10:21:17 帮助过:9人阅读

select id,cid,title,keywords,hits,addtime from `Articles` where id not in(4454,4453,4452,4451,4450,4449,4448,4447) order by addtime desc ,id desc LIMIT 0 , 18


上面的语句去掉not in就有数据。这是为什么。 数据库里有4000多条数据,编号从 1到4454。不可能查不出的。而且之前没事,突然就查不出了。很奇怪。


回复讨论(解决方案)

select id,cid,title,keywords,hits,addtime from `Articles` where id not in('4454','4453','4452','4451','4450','4449','4448','4447') order by addtime desc ,id desc LIMIT 0 , 18

select id,cid,title,keywords,hits,addtime from `Articles` where id not in('4454','4453','4452','4451','4450','4449','4448','4447') order by addtime desc ,id desc LIMIT 0 , 18


还是不行,刚找了下,找到原因了。我不查keywords字段就可以。但不知道为什么这样。

select id,cid,title,keywords,hits,addtime from `Articles` where id not in('4454','4453','4452','4451','4450','4449','4448','4447') order by addtime desc ,id desc LIMIT 0 , 18


还是不行,刚找了下,找到原因了。我不查keywords字段就可以。但不知道为什么这样。,但是如果我全部去掉只查keywords也可以查出来。这是什么情况呢?

不然你用select * from 试一下

不然你用select * from 试一下


也不行

如果是 sql 指令错了,那么数据库就会报错
请贴出错误信息!

如果是 sql 指令错了,那么数据库就会报错
请贴出错误信息!


没有报错。结果返回0条。

那就是没有符合条件的数据喽

那就是没有符合条件的数据喽


我上面说啦。数据库里有4000多条数据,编号从 1到4454。不可能查不出的 所以不可能查不出的。
select id,cid,title,keywords,hits,addtime from `Articles` where id not in(4454,4453,4452,4451,4450,4449,4448,4447) order by addtime desc ,id desc LIMIT 0 , 18
这样查不出。去掉order by addtime,只根据id来排序。就能查出来。
select id,cid,title,keywords,hits,addtime from `Articles` where id not in(4454,4453,4452,4451,4450,4449,4448,4447) order by id desc LIMIT 0 , 18

我又没有你的数据,只听你片面的说,如何知道该怎么做?

我又没有你的数据,只听你片面的说,如何知道该怎么做?


好吧。当我没问。

你在哪里执行的。php 还是 mysql 客户端?

你在哪里执行的。php 还是 mysql 客户端?


mysql的客户端。 之前是5.1的。 后来换空间了。是6.0的了。然后把数据弄过来了。然后我把6.0新增的数据加到以前的5.1里面去试试。是可以查出来的。不知道是不是版本问题

select id,cid,title,keywords,hits,addtime from `Articles` where id not in(4454,4453,4452,4451,4450,4449,4448,4447) and id is not null order by addtime desc ,id desc LIMIT 0 , 18,你试试这个

貌似mysql中的not in 存在一定的bug。我之前也碰到过,直接not in(values) 查询出的结果是0条
可以试试这样:
建一个新表如ids 只有一个id字段,把4454,4453,4452,4451,4450,4449,4448,4447插进去,然后这样查询:
select id,cid,title,keywords,hits,addtime from `Articles` where id not in(select id from ids) order by addtime desc ,id desc LIMIT 0 , 18;
我之前就是这么做的,希望能帮到你

或许是order by 限制了数据吧,并且还有limit的

in 的字段中不能包含null的值,即 select * from table where filed in (select filed1 from table1 where contidtion),其中filed1 不能有null的值

人气教程排行