什么是你想要的默认值?表中的第一个ID?
SELECT id, text
FROM ( SELECT id, categori, active, text, 0 AS prio
FROM table WHERE category = [category id] AND active = 1
UNION ALL
SELECT id, categori, active, text, 1
FROM table
ORDER BY id ASC
LIMIT 1) AS h
ORDER BY prio, RAND()
LIMIT 1
如果您希望在某个默认值,添加一个ENUM列名为default('TRUE', 'FALSE')
:
SELECT id, text
FROM ( SELECT id, categori, active, text, 0 AS prio
FROM table WHERE category = [category id] AND active = 1 AND default = 'FALSE'
UNION ALL
SELECT id, categori, active, text, 1
FROM table
WHERE category = [category id] AND default = 'TRUE'
ORDER BY id ASC
LIMIT 1) AS h
ORDER BY prio, RAND()
LIMIT 1
更容易之一:
SELECT id, text
FROM table
WHERE category = [category id] AND (active = 1 OR default = 'TRUE')
ORDER BY (default = 'FALSE') DESC, RAND()
LIMIT 1
说明:
Basicly这查询提取所有你计数的行获取并将其与默认行组合。他们每个都得到一个prio值,你在做RAND()
之前先订购它们。剩下的事情就是你想如何存储你的默认行。
嗯,这似乎是要走向我所需要的 – nico 2012-04-11 07:20:34
我已经添加了一些解释。让我知道你是否需要更多的例子。 – 2012-04-11 07:25:54
我会做一些测试,谢谢! – nico 2012-04-11 07:27:57