2012-01-31 82 views
0

我知道有simmilar問題在那裏,但here`s在快速隨機選擇行我的實現:的MySQL選擇一個隨機行從兩個連接表

SELECT i.id, i.thumb_img, i.af, i.width, i.height 
FROM images_detail id 
JOIN images AS i ON id.imageid = i.id 
WHERE id.imageid >=1 
AND id.newsroom =1 
AND i.width > i.height 
AND id.imageid >= FLOOR(1 + RAND() *23111593) 
LIMIT 1 

與此查詢的問題是那個冷漠在id.imageid >= FLOOR(1 + RAND() *23111593)中的RANDOM表達式總是返回相同的ID,爲什麼? 請幫忙嗎?

後來編輯:

的查詢需要0.0005秒,使用EXPLAIN,它報告回USING WHERE12993 ROWS回到

的ID是自動遞增的,這不是23111593因爲RAND()返回0.xxxxx所以RAND()* 23111593,返回大約12993行。問題是,相同的ID在頂部,我不想調用ORDER BY子句。

+0

如果您取消where子句的限制和RAND部分,會返回多少個結果? – malonso 2012-01-31 12:54:00

+0

@malonso我編輯了我的文章以包含更多細節。謝謝! – Gabriel 2012-01-31 13:06:05

+0

imageid的分佈情況如何?也許所有的圖像都有ID> 23111593? – bububaba 2012-01-31 13:15:47

回答

0

數據庫中是否有大於您定義的跨度的「imageid」(1 < = X < = 23111593)?

您可能只有一個條目在數據庫中。

(也,請記住,你可能只有一個,實際上適合id.newsroom = 1,i.width的查詢> i.height等)

+0

有12000符合WHERE條件 – Gabriel 2012-01-31 13:01:41

0

最後,我已經加載的所有結果在一個數組中,將其存儲在緩存中,並使用PHP $key=rand(0,sizeof(array))製作,然後如下使用它:array[$key]['property']

相關問題