我正忙着编写一个从数据库中获取数据的PHP应用程序,但我需要按照一定的顺序获取数据。
我的查询如下所示
$sql = "select id,title,type from campaigns where id=$cid order by type";
现在我的问题是这些是'GC','MJ','MU','MS','MW','MX','GS'的不同类型,我希望MX总是最后选择,因此应始终在行的末尾。所以其他人首先要选择,然后选择MX。我希望这是有道理的。
答案 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)