2013-08-22 185 views
0

我有問題顯示隨機項從表中,有沒有辦法只顯示一個隨機項目,但不是我不願意顯示的項目?Mysql查詢一個隨機?

我有表產品

和行

ID TITLE URL_TITLE

$link = "coffee"; 

我希望顯示錶產品隨機只是一個產品,而是不是我在$鏈接

我想說什麼,我只是想從表中隨機項,而不是當在$鏈接=「咖啡」,以獲取隨機元素

PS $鏈接在URL_TITLE行:)

+0

[一個很好的閱讀](http://stackoverflow.com/a/9946238) – HamZa

+0

我現在限制1,這很容易,但要獲得隨機項目,但沒有指定? –

+0

您沒有閱讀整篇文章 – HamZa

回答

3

這應有助於:

SELECT ID, TITLE, URL_TITLE 
FROM PRODUCT 
WHERE URL_TITLE != "coffee" 
ORDER BY RAND() 
LIMIT 1; 

注意,在SQL的某些版本中,!=寫入<>

顯然,你想要選擇所有行或不同的子集,只需使用SELECT *或任何你需要的。

編輯:根據HamZa的評論和James的回答,使用ORDER BY RAND()在大型表上是不好的做法。你可能會生成一個隨機ID並選擇它,檢查它不是你的非法的ID,但是如果你有一大堆你不能選擇,你可能會調用這個查詢很多次(這是不好的)。

0
SELECT id 
FROM PRODUCT 
WHERE URL_TITLE != "coffee" 
ORDER BY RAND() 
LIMIT 1; 
0

儘管我不知道PHP,但我認爲一個簡單的方法是通過$link值作爲where條件的一部分。

使用 '純' SQL:

select * 
from product 
where URL_TITLE <> 'coffee' 
order by rand() 
limit 1 
1

在查詢中使用rand()並不理想,特別是在大型表格中,但即使是小型的,當您不知道它們何時會增長(即站點或服務超出您的期望等)時也是如此。

您可以使用它像這樣:

select item from product where item != '$link' ORDER BY rand() LIMIT 1 

但是,你應該用更好的東西,比如臨時表,或者你可以在一個查詢中選擇所有從數據庫中的ID,使用PHP來選擇一個隨機從他們全部,然後使用由PHP選擇的ID並從數據庫中獲取數據。