php - 随机SQL记录同时排除特定记录

标签 php mysql ajax codeigniter random

我有一个显示两部电影封面的 CodeIgniter PHP 应用程序。在它们旁边是一个“随机电影”按钮,该按钮使用 AJAX 将两部电影替换为一组新电影。您可以继续单击它,一遍又一遍,并看到它继续替换电影封面的图像。显示的前两个封面设置为默认值,并且在用户单击随机电影按钮后它们不应该显示。问题是这样的:单击随机电影按钮时,有时需要多次单击才能最终显示新封面。也就是说,同一个封面将连续多次返回。 正在从略有不同的 URL 调用正在获取的两个不同封面,因此它们很少会同时中断。这让我知道它令人耳目一新,但该函数多次返回同一部电影。如果我直接访问通过 AJAX 调用的 url,我永远不会看到这种情况发生,因为我使用 Session 类来存储最后一部电影并将其从 SQL 查询中排除(即 WHERE id NOT IN ($default_movie , $last_movie)). 知道为什么直接访问 url 可以正常工作,但是当通过 AJAX 调用时,我看到了这种行为吗?

我知道这可能不够清楚,所以如果我能澄清一些没有意义的事情,请告诉我。如果这也有帮助,我会添加代码。谢谢 friend !

获取随机电影的查询:

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;
        }
    }

最佳答案

Any idea why accessing the url directly would work fine, but when calling via AJAX, I'm seeing this behavior?

我有个想法是的。

浏览器缓存.. PITA!

尝试明确关闭缓存:

$.ajaxSetup({cache: false});

假设您使用的是 jQuery,请将它放在您的 ajax 请求之前。

如果您不是,则需要将一些随机变量附加到 url,这样可以防止浏览器缓存请求。

关于php - 随机SQL记录同时排除特定记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16920558/

相关文章:

连接 MySQL 数据库时出现 PHP PDO fatal error

c# - 通过 C# 在 MySQL 中检查和创建 View

JAVASCRIPT编辑 header 来调用返回json的api

php - 如何从 php ://input? 设置目录的写权限

PHP Zend - 执行获取行集和记录总数

php - Codeigniter 插入 MySql 表具有自动递增 ID 的位置?

php - Yii 中的 Prinout 扩展,如何删除页眉、页脚和 anchor 标记?

MYSQL 子查询计数

javascript - jQuery点击事件不点击触发

jquery - IIS 中带有虚拟目录的 AJAX url 路由问题