php 网页 order by 排序无效

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了php 网页 order by 排序无效相关的知识,希望对你有一定的参考价值。

下面代码无论 ORDER BY 什么,也无论 DESC 还是 ASC 都是乱序排列,发现挨过语句中删除 AND ad_category in ($offspring),排序生效,加入 AND ad_category in ($offspring) 排序失效,请教怎样解决。谢谢!

function _getOffspring($id)
$data = array();
$ids = array();
if(!is_array($id)) $id = array($id);
$id = implode(', ', $id);
$sql = "SELECT category_id, category_title, category_parent FROM categories WHERE category_parent IN (" . $id . ")";
$re = mysql_query($sql);
if(mysql_num_rows($re))
while($rs = mysql_fetch_assoc($re))
$ids[] = $rs['category_id'];

$ids = array_merge($ids, _getOffspring($ids));
return $ids;
else
return $ids;



function getOffspring($id)
if(!is_array($id)) $id = array($id);
return array_merge($id, _getOffspring($id));


$ads_counter = 0;
$imgs = array();
$ads = array();
$class = array();

$sarr = (getOffspring($cat_id));
$num=count($sarr);
for($i=0;$i<$num;$i++)
$offspring = $sarr[$i];
$sresult = mysql_query("SELECT ad_id,ad_date_begin,ad_date_end,ad_type,ad_title,ad_description,ad_image1,ad_options,ad_price,ad_status FROM ads WHERE ad_status=1 AND ad_category in ($offspring) ORDER BY ad_date_begin DESC",$class_link);
while(list($ad_id,$ad_date_begin,$ad_date_end,$ad_type,$ad_title,$ad_description,$ad_image1,$ad_options,$ad_price,$ad_status) = mysql_fetch_row($sresult))
$ad_title = strip_tags(stripslashes($ad_title));
$ad_price = strip_tags(stripslashes($ad_price));
... //略去其它代码

这个没发现问题,不过有个补救方法:
while($rt = mysql_fetch_row($sresult))
$rt['ad_title'] = strip_tags(stripslashes($rt['ad_title']));
$['ad_price'] = strip_tags(stripslashes($rt['ad_price']));
... //略去其它代码
$ads[] = $rt;
$adDates[] = $rt['ad_date_begin'];

array_multisort($adDates, SORT_NUMERIC, SORT_DESC, $ads); //如果ad_date_begin时间戳就用SORT_NUMERIC,如果是格式化的日期,就用SORT_STRING,最终出来的$ads就是你要的结果
参考技术A 在调用mysql_query()之前输出sql语句,然后在数据库里面执行一下 看看是什么结果

mysql order by无效问题

参考技术A 1,发现mysql查询时,某个字段order by排序比较乱,并不是按照我写的sql排序方式
2,事实是按照第一位数字排序,如下图所示:

3,查看val字段类型,发现val是varchar类型的。虽然值是数字,但mysql排序是按照设置的字段类型来排序的,varchar就会自动按照字符串第一位排序。
4,解决办法:1,把字段类型修改为int。2,或者在使用sql查询的时候,使用cast(val as UNSIGNED INTEGER)来转换一下类型。

以上是关于php 网页 order by 排序无效的主要内容,如果未能解决你的问题,请参考以下文章

mysql order by无效问题

php排序比mysql“order by”好吗?

PHP MySQL Order By

php查询使用“Order By .... Limit”后如何使用“Order by”?

PHP MySQL Order By 关键词

MySQL中order by排序时,数据存在null咋办