$nameimg = mysql_query("SELECT *
FROM images
WHERE id='".$row['imgID']."'
ORDER BY RAND()
LIMIT 10");
要顯示隨機圖像由所述用戶,但它沒有顯示隨機圖像。它只是通過提交時間顯示。
$nameimg = mysql_query("SELECT *
FROM images
WHERE id='".$row['imgID']."'
ORDER BY RAND()
LIMIT 10");
要顯示隨機圖像由所述用戶,但它沒有顯示隨機圖像。它只是通過提交時間顯示。
WHERE
條件檢查ID通常會將結果集減少到一行,因此整個ORDER BY
子句變得無用。
你應該考慮你的模式並重新設計查詢。
我認爲這是一個user_id而不是image_id - 但我懷疑只有一行 – 2012-08-06 22:16:40
@AdrianCornish:你可能是對的,但假設變量/索引有一個有意義的名字,我可能是對的; - ) – CodeZombie 2012-08-06 22:19:27
你應該使用PHP來隨機洗牌數組。如果現場你有興趣在被稱爲url
:
$req = mysql_query("SELECT url FROM images WHERE user_id = '{$row['userID']}'");
$images = array();
while($image = mysql_fetch_array($req)) {
$images[] = $image['url'];
}
shuffle($images);
$tenImages = array_slice($images, 0, 10);
編輯。並請考慮使用PDO prepared statements。
更新。爲什麼不一次選擇一張十張圖像?
$images = array();
while(count($images) < 10) {
$req = mysql_query("SELECT url FROM images WHERE user_id = '{$row['userID']}' LIMIT " . rand(1, 10000) . ", 1");
$image = mysql_result($req, 0, 0);
if(!in_array($image)) {
$images[] = $image;
}
}
有趣,速度更快的方式。提供here。
$ids = array();
for($i = 0 ; $i < 1000 ; $i++) {
$ids[] = rand(1, 10000);
}
$req = mysql_query("SELECT url FROM images WHERE user_id = '{$row['userID']}' AND id IN (" . implode(',', $ids) . ") LIMIT 10");
In我的意見SQL是正確的做法。你不想爲了構建一個數組而檢索很多圖像,獲取隨機圖像並立即釋放分配的內存。考慮網絡流量和內存分配時,這是沒有意義的。 – CodeZombie 2012-08-06 22:23:45
我同意ZombieHunter爲什麼用SQL這種簡單的方法做到這一點很困難(不太優化,使用PHP) – arnoudhgz 2012-08-06 22:33:36
顯然,如果表中包含N個圖像,SQL服務器將只生成N個隨機數需要10張圖片。此鏈接解釋了一個權衡:http://www.titov.net/2005/09/21/do-not-use-order-by-rand-or-how-to-get-random-rows-from-表/ – 2012-08-06 22:34:24
多少圖像是存在 - 這是什麼SELECT COUNT(*)FROM圖像WHERE ID =' 「$行[ 'imgID'。」返回? – 2012-08-06 22:15:53
你可以分享'圖像'表結構嗎? – Biotox 2012-08-06 22:17:49
它看起來像你只是選擇一行,或不是id colun主鍵列? – arnoudhgz 2012-08-06 22:34:32