2013-03-11 86 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