我有問題顯示隨機項從表中,有沒有辦法只顯示一個隨機項目,但不是我不願意顯示的項目?Mysql查詢一個隨機?
我有表產品
和行
ID TITLE URL_TITLE
和
$link = "coffee";
我希望顯示錶產品隨機只是一個產品,而是不是我在$鏈接
我想說什麼,我只是想從表中隨機項,而不是當在$鏈接=「咖啡」,以獲取隨機元素
PS $鏈接在URL_TITLE行:)
我有問題顯示隨機項從表中,有沒有辦法只顯示一個隨機項目,但不是我不願意顯示的項目?Mysql查詢一個隨機?
我有表產品
和行
ID TITLE URL_TITLE
和
$link = "coffee";
我希望顯示錶產品隨機只是一個產品,而是不是我在$鏈接
我想說什麼,我只是想從表中隨機項,而不是當在$鏈接=「咖啡」,以獲取隨機元素
PS $鏈接在URL_TITLE行:)
這應有助於:
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,但是如果你有一大堆你不能選擇,你可能會調用這個查詢很多次(這是不好的)。
SELECT id
FROM PRODUCT
WHERE URL_TITLE != "coffee"
ORDER BY RAND()
LIMIT 1;
儘管我不知道PHP,但我認爲一個簡單的方法是通過$link
值作爲where
條件的一部分。
使用 '純' SQL:
select *
from product
where URL_TITLE <> 'coffee'
order by rand()
limit 1
在查詢中使用rand()並不理想,特別是在大型表格中,但即使是小型的,當您不知道它們何時會增長(即站點或服務超出您的期望等)時也是如此。
您可以使用它像這樣:
select item from product where item != '$link' ORDER BY rand() LIMIT 1
但是,你應該用更好的東西,比如臨時表,或者你可以在一個查詢中選擇所有從數據庫中的ID,使用PHP來選擇一個隨機從他們全部,然後使用由PHP選擇的ID並從數據庫中獲取數據。
[一個很好的閱讀](http://stackoverflow.com/a/9946238) – HamZa
我現在限制1,這很容易,但要獲得隨機項目,但沒有指定? –
您沒有閱讀整篇文章 – HamZa