1

可以说我有如下表格。

create table t1 (id INT, tempData varchar(25));

和数据为

insert into t1 values
(01, 'value 01'),
(02, 'value 02'),
(03, 'value 03'),
(04, 'value 04'),
(05, 'value 05'),
(06, 'value 06'),
(07, 'value 07'),
(08, 'value 08'),
(09, 'value 09'),
(10, 'value 10'),
(11, 'value 11'),
(12, 'value 12');

现在我想要的是创建一个查询以获取以下格式的数据

+++++++++++++++++
Id  + tempData
+++++++++++++++++
03  + value 03
09  + value 09
01  + value 01
// now random order except above three ids
04  + value 04
06  + value 06
.
.
.
+++++++++++++++++

我希望第一行为 03,然后是 09,然后是 01,然后是任何随机顺序。

关于如何完成这项工作的任何建议?

sqlfiddle 中的数据


编辑 1

我有巨大的数据库和订购我有大约 1200 个 id。所以我不能手动写这些。还有其他方法可以让我说数字3,9,1吗?

4

3 回答 3

1
select * from t1 order by (id = 3) desc, (id = 1) desc, (id = 9) desc, rand();

另外,谢谢你的小提琴;很少有人问 SQL 问题知道它,或者懒得做一个。

帖子编辑

架构:

create table t2 (prio INT PRIMARY KEY, t1_id INT);

insert into t2 values (3, 3), (2, 1), (1, 9);

询问:

select t1.*
from t1
left join t2 on t1.id = t2.t1_id
order by t2.prio desc, rand();
于 2012-11-22T09:57:40.670 回答
0

尝试这个:

ORDER BY 
  CASE id
    WHEN 3 THEN -3
    WHEN 9 THEN -2
    WHEN 1 THEN -1
    ELSE 0
  END, Rand(); 

更新1:试试这个:

SELECT t1.*
FROM t1
LEFT JOIN
(
    SELECT -1 sortorder, 3 ID
    UNION ALL
    SELECT -2, 9
    UNION ALL
    SELECT -3, 1
) t2 ON t1.ID = t2.ID
ORDER BY t2.sortorder DESC, Rand();

SQL 小提琴演示

于 2012-11-22T09:59:04.250 回答
0

试试这个 ORDER BY -

SELECT
  *
FROM
  t1
ORDER BY
  CASE id WHEN 3 THEN -3 WHEN 9 THEN -2 WHEN 1 THEN -1 ELSE RAND() END

CREATE TABLE t2(id INT PRIMARY KEY AUTO_INCREMENT, sort_id INT);
INSERT INTO t2 VALUES(NULL, 3),(NULL, 9),(NULL, 1);

SELECT t1.*, t2.* FROM t1
  LEFT JOIN t2
    ON t1.id = t2.sort_id
ORDER BY IFNULL(t2.id - 100000000, RAND())

...100000000 用于省略 MAX(id)。

于 2012-11-22T10:01:32.137 回答