你有没有遇到,写SQL语句时,当加上order by排序条件,就无法查询读取出数据,去掉后就能读取数据。
比方:
$sql = ”SELECT * FROM test WHERE (1=1) AND user_name LIKE ‘%Unvs博客%’ ORDER BY user_id DESC“; //红色部分加上就不能查出数据(可能存在like条件不一样而能查出数据、实在非常诡异)、去掉就能得到数据
分析原因:
仔细查看表结构与条件的字段,发现user_name、user_id字段类型都为varchar,会不会跟数据类型有关系?后面果真如此。
解决方案:
将order by排序的user_id字段类型转为int无符号整形,写法如下:
$sql = ”SELECT * FROM test WHERE (1=1) AND user_name LIKE ‘%Unvs博客%’ ORDER BY cast(user_id, UNSIGNED INTEGER) DESC”;//有符号整形 SIGNED
INTEGER
当然,可能你的情况跟我的不完全一样,也不一定能解决问题,那就需要另寻分析了,比如SQL语法错误、数据表结构设计、数据优化等。