我有一個CodeIgniter PHP應用程序,它顯示兩個電影封面。在他們旁邊是一個「隨機電影」按鈕,它使用AJAX將兩部電影替換爲一組新電影。您可以繼續單擊此按鈕,並一遍又一遍地看到它繼續替換電影封面的圖像。前兩個要顯示的封面設置爲默認值,並且在用戶點擊隨機電影按鈕後不應顯示。問題是這樣的:當點擊隨機電影按鈕時,有時候會有很多次點擊才能最終顯示新的封面。也就是說,同一封面將連續多次返回。兩個不同的封面被調用的網址略有不同,所以它們很少會同時斷開。這讓我知道它很清爽,但是該函數多次返回相同的電影。如果我直接訪問通過AJAX調用的url,我從來沒有看到這種情況發生,因爲我已經使用Session類存儲了最後一部電影並將其從SQL查詢中排除(即WHERE id NOT IN ($default_movie, $last_movie)
)。 任何想法爲什麼直接訪問網址會正常工作,但通過AJAX調用時,我看到了這種行爲?隨機SQL記錄,同時排除特定記錄
我知道這可能沒有儘可能清楚,所以讓我知道如果我能澄清一些沒有意義的東西。如果有幫助,我會添加代碼。謝謝朋友!
查詢來獲取隨機的電影:
SELECT * FROM (`movies`) WHERE `id` NOT IN (2, 10) ORDER BY RAND() LIMIT 1
型號方法:
public function getRandom($count = 1, $featured = FALSE, $series = FALSE, $exclude = 0, $last = 0) {
$this->db->order_by('id', 'random');
$this->db->limit(1);
$conditions = array();
if ($exclude > 0) {
$conditions['id !='] = $exclude;
}
if ($last > 0) {
if (!empty($conditions['id !='])) {
$conditionsNotIn = "id NOT IN (" . $conditions['id !=']. ", $last)";
unset($conditions['id !=']);
$this->db->where($conditionsNotIn);
} else {
$conditions['id !='] = $last;
}
}
if ($featured) {
$conditions['featured'] = 1;
}
if ($series) {
$conditions['current_series'] = 1;
}
$movie = $this->db->get_where('movies', $conditions);
$movie = $movie->row();
if (!is_null($movie)) {
return $movie;
} else {
return FALSE;
}
}
你能發佈完整的SQL查詢 –
你確認AJAX請求是否正確地填充了'$ default_movie'和'$ last_movie'變量? – eggyal
是的,我已經添加了查詢。我還利用CI的log_message()來跟蹤變量每次都在變化。 – JamieHoward