Home >Backend Development >PHP Tutorial >mysql用了not in为什么查不出数据。

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

WBOY
WBOYOriginal
2016-06-23 13:26:211412browse

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的值

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn