2013-03-11 58 views
1

我想从数据库中获得随机行,但使用一些内容限制它。随机排序和LIKE

例如,表的定义:

id | content | tags

查询是:SELECT * FROM tbl ORDER BY RAND() LIMIT 1

标签部分看起来像:tag1, tag2, tag42。所以,例如,我想从tags内部有tag42tag2的一个随机行。

一些伪代码:

SELECT * FROM tbl ORDER BY RAND() WHERE tags LIKE '%tag42%' OR '%tags2%' LIMIT 1

+1

你的ORDER BY和WHERE是走错了路回合? – 2013-03-11 19:08:23

回答

3

你的伪代码几乎是正确的,除非你有条款错误的顺序为:WHERE到来之前ORDER BY

SELECT * FROM tbl WHERE tags LIKE '%tag42%' OR '%tags2%' ORDER BY RAND() LIMIT 1 

documentation for SELECT syntax,以从不出错再次得到

+0

在一张大桌子上需要很多时间。 – ravnur 2013-03-11 19:45:49

+0

是的。但是,嘿,他将标签保留为逗号分隔的字符串! – Mchl 2013-03-11 20:01:00

+1

是的,结果不是很大,并且在db中有不到200行。这就是标签以字符串形式存储的原因。 – Ockonal 2013-03-11 21:49:32