[英]Select a specific record in a group of records for all groups of records in MySQL
[英]Random SQL record while excluding specific records
我有一个CodeIgniter PHP应用程序,显示两个电影封面。 在它们旁边是一个“随机电影”按钮,它使用AJAX用一组新电影取代两部电影。 您可以一遍又一遍地继续单击此按钮,并看到它继续替换电影封面的图像。 要显示的前两个封面被设置为默认值,并且在用户单击随机影片按钮后它们永远不会显示。 问题是: 当点击随机电影按钮时,有时会多次点击以最终显示新的封面。 也就是说,相同的封面将连续多次返回。 正在从稍微不同的URL调用正在获取的两个不同的封面,因此它们很少会同时中断。 这让我知道它很新鲜,但该功能多次返回同一部电影。 如果我直接访问通过AJAX调用的url,我从来没有看到过这种情况,因为我使用了Session类来存储最后一部电影并将其从SQL查询中排除(即WHERE id NOT IN ($default_movie, $last_movie)
)。 知道为什么直接访问url会正常工作,但是当通过AJAX调用时,我看到了这种行为?
我知道这可能不是很清楚,所以如果我能澄清一些没有意义的话,请告诉我。 我会添加代码,如果这也有帮助。 谢谢朋友!
查询获取随机电影:
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;
}
}
知道为什么直接访问url会正常工作,但是当通过AJAX调用时,我看到了这种行为?
我有一个想法是的。
浏览器缓存.. PITA!
尝试明确关闭缓存:
$.ajaxSetup({cache: false});
假设你正在使用jQuery,那就把它放在你的ajax请求之前。
如果您不需要将一些随机变量附加到URL,这会阻止浏览器缓存请求。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.