mysql查询语句加入order by desc读取不出数据

作者: unvs 分类: Database 发布时间: 2017-06-06 14:41 ė15,442 views 61条评论

你有没有遇到,写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语法错误、数据表结构设计、数据优化等。

本博文章基本上属于原创或收集整理,都是心血结晶。
欢迎转载分享,转载请注明出处,谢谢!
本文地址:mysql查询语句加入order by desc读取不出数据

一条评论

  1. 晴枫 2017 年 8 月 12 日 下午 10:44 回复

    看起来是表字段定义的问题,像user_id字段还是建议定义成UNSIGNED INTEGER类型

发表评论

电子邮件地址不会被公开。 必填项已用 * 标注

您可以使用这些 HTML 标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Ɣ回顶部