CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Web 开发 >  PHP

一个数据库查询返回值的排序问题,请大家来看看!

楼主jxyuhua(一塌糊涂)2004-08-02 08:59:50 在 Web 开发 / PHP 提问

PostgreSQL数据库  
  在数据库中查询如下数据(当然这个表中还有其它字段,这里没有使用):  
   
  select   products_id   from   products      
  where   products_id   in   (667,663,691,719,683,675,671,679,687,739)  
  返回值为:  
  ----------------------------------------------------  
  667  
  671  
  675  
  679  
  683  
  687  
  691  
  719  
  739  
  663  
  ----------------------------------------------------  
  为什么得到的结果不按(667,663,691,719,683,675,671,679,687,739)中的顺序排序呢?  
  而另一个同样的查询得到的结果却是可以按括号中的列表值排序的,例如:  
  select   products_id   from   products      
  where   products_id   in   (12,14,13,15,11,436,437,268)  
  得到的结果如下:  
  --------------------------------------------------  
  12  
  14  
  13  
  15  
  11  
  436  
  437  
  268  
  -------------------------------------------------  
   
  不知道PostgreSQL(或其它的数据库),这种情况下是如何排序的?有什么规律?为什么两次排序的结果不一样?  
  请各位帮忙!  
  问题点数:100、回复次数:12Top

1 楼xuzuning(唠叨)回复于 2004-08-02 10:26:39 得分 0

where   products_id   in   (667,663,691,719,683,675,671,679,687,739)  
  返回的是记录的物理顺序,并不做排序处理Top

2 楼allkill(傲气游)回复于 2004-08-02 11:08:40 得分 0

order   by   products   descTop

3 楼allkill(傲气游)回复于 2004-08-02 11:08:54 得分 2

order   by   products_id   descTop

4 楼feixuehenshui(飞雪恨水)回复于 2004-08-02 11:24:33 得分 2

呵呵   order   byTop

5 楼tt007((独孤求败--多情贱客无情贱))回复于 2004-08-02 12:37:07 得分 2

我想用order   by楼主一定是知道的,只是不用order   by,为什么会这样。。。Top

6 楼pwtitle(doodoo)回复于 2004-08-02 12:44:10 得分 2

只是按默认关键字排序。Top

7 楼hkdsy(花开的声音)回复于 2004-08-02 12:45:56 得分 2

数据库在安装的时候,应该有一种默认的排序方式,可以选择,如果不选择,多半都是默认按照纪录的物理顺序返回了;不用Order   by,就不会做其他方式的排序了。Top

8 楼jxyuhua(一塌糊涂)回复于 2004-08-02 13:19:49 得分 0

我是楼主,感谢各位的帮忙。  
   
  既然默认的方法不行,那我就想人工自己排序,我想通过这种方法来实现:  
  一个数组,定义它的排序方式:(pid表示products_id,   sid表示排序的值)  
  $sort   =   array   (  
                        0   =>   array('pid'   =>   667,   'sid'   =>   1),  
                        1   =>   array('pid'   =>   663,   'sid'   =>   2),  
                        2   =>   array('pid'   =>   691,   'sid'   =>   3),  
                        3   =>   array('pid'   =>   719,   'sid'   =>   4))  
   
  另一个数组就返回从数据库里查询返回的产品信息:  
  $products   =   array(  
                      0   =>   array('pid'   =>   667,   'products_name'   =>   0708),  
                      1   =>   array('pid'   =>   691,   'products_name'   =>   0732),  
                      2   =>   array('pid'   =>   719,   'products_name'   =>   0760),  
                      3   =>   array('pid'   =>   663,   'products_name'   =>   0704))  
   
  然后写一个函数,让$products中的内容以'pid'为关键字,按$sort中的内容来排序。  
  想法是有了,但我还没实现它,不知道大家有什么办法来实现?Top

9 楼skystar008(疯花血月)回复于 2004-08-02 14:09:05 得分 2

order   by   group   byTop

10 楼jxyuhua(一塌糊涂)回复于 2004-08-02 16:22:41 得分 0

我这个是没有固定的徘序字段的,要另外计算出来,就象上面列出的products_id   in   (12,14,13,15,11,436,437,268)这样,因此order   by   group   by恐怕很难实现。Top

11 楼xuzuning(唠叨)回复于 2004-08-02 17:09:09 得分 88

<?php  
  $sort   =   array   (  
                        0   =>   array('pid'   =>   667,   'sid'   =>   1),  
                        1   =>   array('pid'   =>   663,   'sid'   =>   2),  
                        2   =>   array('pid'   =>   691,   'sid'   =>   3),  
                        3   =>   array('pid'   =>   719,   'sid'   =>   4));  
   
  $products   =   array(  
                      0   =>   array('pid'   =>   667,   'products_name'   =>   '0708'),  
                      1   =>   array('pid'   =>   691,   'products_name'   =>   '0732'),  
                      2   =>   array('pid'   =>   719,   'products_name'   =>   '0760'),  
                      3   =>   array('pid'   =>   663,   'products_name'   =>   '0704'));  
   
  //   工作函数用于对$sort数组按sid排序  
  function   _sort($a,$b)   {  
      if($a['sid']   ==   $b['sid'])   return   0;  
      return   $a['sid']   >   $b['sid']   ?   1:   -1;  
  }  
   
  usort($sort,   '_sort');   //对$sort排序,你可任意设定sid列的值  
  //print_r($sort);  
   
  $tmp   =   array();   //工作数组,用于缓存对$products排序的结果  
   
  //工作函数,用于在$products中查找指定元素  
  function   _find($ar,   $v)   {  
      foreach($ar   as   $a)  
          if($a['pid']   ==   $v)   return   $a;  
      return   "";  
  }  
   
  foreach($sort   as   $v)  
      $tmp[]   =   _find($products,   $v['pid']);  
   
  $products   =   $tmp;  
  print_r($products);  
   
  ?>  
  Top

12 楼jxyuhua(一塌糊涂)回复于 2004-08-03 09:07:54 得分 0

不多说了,多谢各位,马上结贴。Top

相关问题

  • 请教数据库查询的排序问题
  • 数据库查询返回值
  • 数据库查询!
  • 数据库查询
  • 数据库查询~~~~
  • 数据库查询~~~~
  • 数据库查询~~~~
  • 数据库查询
  • 数据库查询
  • 查询数据库

关键词

  • 排序
  • 数据库
  • 查询
  • pid
  • 返回
  • 数组
  • 值
  • products
  • sid
  • 默认

得分解答快速导航

  • 帖主:jxyuhua
  • allkill
  • feixuehenshui
  • tt007
  • pwtitle
  • hkdsy
  • skystar008
  • xuzuning

相关链接

  • Web开发类图书

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo