按特定顺序排序SQL查询

时间:2011-12-21 16:17:52

标签: php sql sql-order-by

假设我有一个表Guest,它有g_id列:值1到10.

现在我希望查询返回g_id既不是升序也不是降序。 但我希望按照这个特定的顺序排在第4位,然后是第3位,然后是第5位。 我也想要第4和第3个条目。

说我的参赛作品有一个id和一个名字。 ,即。我的表Guest有这两个表。 现在我的表格如下。

1 A
2 B
3 C
4 D
5 E
6 F
7 G
8 H
9 I
10 J

现在我想要的是第4个第3个和第5个g_id的条目,并按此特定顺序。

我如何编写SQL查询? 感谢。

从来宾中选择* _ __ _ __ _ ____ ???

请填补空白。

6 个答案:

答案 0 :(得分:2)

判断某事是第4,第3还是第5的顺序是什么?如果没有ORDER BY子句,SQL将以不确定的顺序返回数据。您不能依赖于在数据库表本身中输入或存储行的顺序。

您可以像这样硬编码您所要求的内容:

select *
from Guest
order by case 
    when g_id = 4 then 1
    when g_id = 3 then 2
    when g_id = 5 then 3
    else 4
end

答案 1 :(得分:2)

您可以在CASE中使用ORDER BY语句使用假列进行排序,并使用WHERE IN子句仅返回所需的值。

SELECT * 
FROM   Guest
WHERE  g_id IN (3, 4, 5)
ORDER BY
       CASE WHEN g_id = 4 THEN 1
            WHEN g_id = 3 THEN 2
            WHEN g_id = 5 THEN 3
       END

答案 2 :(得分:0)

一个解决方案是case声明:

select g_id from (
    select g_id, case g_id
       when 4 then 1
       when 3 then 2
       when 5 then 3
       else 0
    end virtcol
    where virtcol != 0
    order by virtcol
);

答案 3 :(得分:0)

我不确定您的订购设置如何,但您可以按具体要求订购:

ORDER BY
   g_id = 4 DESC,
   g_id = 3 DESC,
   g_id = 5 DESC

你可能最好选择条目,并在你的php代码中做这样的事情:

$order = array('4 ', '3 ', '5 ');
$data = array();
while ($row = $result->fetch()) {
   $data["$row->g_id "] = $row;
}
$data = array_merge(array_flip($order), $data);

答案 4 :(得分:0)

我认为答案主要取决于您正在进行的DBMS。

在Oracle中,下面的查询,即使效率低下,也应该起作用

select * from 
    (select * , rownum as order from guest order by id asc ) b 
where b.order = 4
UNION
select * from 
    (select * , rownum as order from guest order by id asc ) b 
where b.order = 3
UNION
select * from 
    (select * , rownum as order from guest order by id asc ) b 
where b.order = 5

不确定使用简单查询是否可以提高效率, 我只会使用上面的怪物而且只有你要查询的桌子非常小。

如果表格很大,您还有另一个选项,您只需要提取第一行。在你描述的情况下,我将检索前5行,然后以编程方式提取位置4,3,5中的行。

您可以在oracle中使用此查询提取前5行

select * from guest order by id asc where rownum < 6

答案 5 :(得分:0)

此查询将为您提供第3,第5和第4项(limit 2, 1表示“从第3项开始检索,检索总数= 1条记录)

(select g_id from Guest limit 2,1)
UNION (select g_id from Guest limit 4,1
UNION (select g_id from Guest limit 3,1)