使用mySql以特定顺序获取数据

时间:2010-01-26 13:02:34

标签: php mysql

我正忙着编写一个从数据库中获取数据的PHP应用程序,但我需要按照一定的顺序获取数据。

我的查询如下所示

$sql = "select id,title,type from campaigns where id=$cid order by type";

现在我的问题是这些是'GC','MJ','MU','MS','MW','MX','GS'的不同类型,我希望MX总是最后选择,因此应始终在行的末尾。所以其他人首先要选择,然后选择MX。我希望这是有道理的。

7 个答案:

答案 0 :(得分:15)

您可以这样排序:

ORDER BY IF (type = 'MX', 1, 0), type

答案 1 :(得分:1)

(select id,title,type from campaigns where id=$cid and type <> 'MX' order by type)
UNION
(select id,title,type from campaigns where id=$cid and type ='MX')

答案 2 :(得分:0)

$sql = "select id,title,type from campaigns where id=$cid and type != 'MX' order by type 
union
select id,title,type from campaigns where id=$cid and type = 'MX'"; 

答案 3 :(得分:0)

您在查询中选择了多少行?看起来只有一个(我假设id是唯一的......)所以排序顺序没有效果。

除了你的排序顺序应该做它应该做的事情,因为按字母顺序,MX将是列表中的最后一个。

答案 4 :(得分:0)

其他人已经抛出了SQL方法。既然您还使用php标记了这一点,我还会指出您可以使用usort函数来定义排序算法使用的自定义比较函数。

 // returns 1 if lhs > rhs, returns 0 if lhs == rhs, returns -1 if lhs <rhs
 function customCompare($lhsRow, $rhsRow)
 {
     $lhsType = $lhsRow['type']
     $rhsType = $lhsRow['type']
     // special case code so that 'MX' is always > then anything (except for another MX)
     if ($lhsType == 'MX')
     {
          if ($rhsType == 'MX')
          {
               return 0;
          }
          else
          {
               return 1;
          }
     }

     // return 1 if lhs > rhs
     if ($lhsType > $rhsType)
     {
         return 1;
     }
     else if ($rhsType < $lhsType)
     {
         return -1;
     }
     else
     {
         return 0;
     }
 }

 $rows = /*perform query without ORDER*/
 usort($rows, "customCompare");

答案 5 :(得分:0)

您可能想要使用UNION

SELECT id, title, type
FROM campaigns
WHERE id={$cid}
AND type != 'MX'
ORDER BY type

UNION

SELECT id, title, type
FROM campaigns
WHERE id={$cid}
AND type == 'MX'

并将其作为一个查询运行。

答案 6 :(得分:0)

...
order by case when type = 'MX' then 1 else 0 end, type

可以移植到其他数据库(例如postgresql)