我需要选择用户尚未观看的所有电影。
获取最后20部电影的sql查询如下所示:
SELECT movies.* FROM movies, hdd WHERE hdd.id=movies.hdd_id and hdd.status='1' and movies.skip!='1' order by id desc limit 20
电影表如下所示:
id int(11) Incrément automatique
hdd_id int(20)
tmdb_id int(20) NULL
imdb_id text NULL
file_path text
ftp_path text NULL
file_name text
resolution text NULL
timestamp int(11) NULL
skip int(2)
credits int(2)
title varchar(255) NULL
original_title varchar(255) NULL
adult int(2) NULL
categ text NULL
collection text NULL
companies text NULL
language text NULL
lang text NULL
rating text NULL
mpaa text NULL
tagline text NULL
overview text NULL
budget text NULL
homepage text NULL
popularity text NULL
runtime varchar(255) NULL
revenue varchar(255) NULL
release_date date NULL
vote_average varchar(255) NULL
vote_count varchar(255) NULL
movie_poster_path varchar(255) NULL
movie_poster varchar(255) NULL
movie_backdrop_path varchar(255) NULL
movie_backdrop varchar(255) NULL
只有当hdd状态为online并且爬虫程序没有跳过它时,才会选择电影。
现在的问题是,监视日志位于一个单独的表中:该表如下所示:
id int(11) Incrément automatique
type varchar(255)
ref int(9) NULL
membre int(9) NULL
counter int(9) NULL
duration varchar(255)
currentTime varchar(255)
membre是用户id,ref是电影tmdb\u id
这就是我所尝试的
SELECT movies.* FROM movies, hdd, watch WHERE hdd.id=movies.hdd_id and hdd.status='1' and movies.skip!='1' and (watch.membre='$_SESSION[id]' and watch.ref=movies.tmdb_id) order by id desc limit 20
但这当然行不通。我认为输出是反向的。它不是归还那些没人看的东西,而是归还那些看了的电影。
3条答案
按热度按时间dw1jzc5e1#
你需要的是
LEFT JOIN
观察并检查中是否没有匹配的条目watch
. 我认为这会奏效:az31mfrm2#
或者,要使其保持相同的样式,而不使用联接(如果出于任何原因这是您的首选),也可以执行以下操作:
pgky5nke3#
你需要从所有已经看过的电影列表中筛选电影。使用
left join
它可以被过滤。试试这个。