4

2 つの映画の表紙を表示する CodeIgniter PHP アプリケーションがあります。それらの横には、AJAX を使用して 2 つのムービーを新しいムービー セットに置き換える「ランダム ムービー」ボタンがあります。これを何度もクリックし続けると、映画の表紙の画像が置き換えられ続けるのを見ることができます。表示する最初の 2 つのカバーはデフォルトとして設定されており、ユーザーがランダム ムービー ボタンをクリックした後に表示されることはありません。問題は次のとおりです。ランダムなムービー ボタンをクリックすると、最終的に新しいカバーが表示されるまで何度もクリックする必要があります。つまり、同じカバーが連続して複数回返されます。フェッチされている 2 つの異なるカバーは、わずかに異なる 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;
        }
    }
4

1 に答える 1