按随机顺序获取数据,但提供了3个id



假设我有如下表。

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

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

此外,感谢Fiddle;问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();

试试这个:

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 Fiddle演示

尝试此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)。

最新更新