嘿,我需要选择用户尚未观看的所有电影...
我获取最近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状态为联机且搜寻器没有跳过电影时,此选项才会选择电影。
现在的问题是监视日志位于单独的表中: 该表如下所示:
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_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
但是,这当然行不通。我认为输出是向后的...而不是返回未观看的内容,而是返回已观看的电影。任何帮助将不胜感激
答案 0 :(得分:3)
您需要从已观看的整个列表中筛选电影。使用left join
可以对其进行过滤。试试这个。
SELECT movies.* FROM movies left join watch on watch.ref=movies.tmdb_id, hdd
WHERE hdd.id=movies.hdd_id and hdd.status='1'and movies.skip!='1' and
watch.membre = '$_SESSION[id]'
order by id desc limit 20
答案 1 :(得分:2)
您需要进行LEFT JOIN
的观看,然后检查watch
中是否没有匹配的条目。我认为这会起作用:
SELECT movies.*
FROM movies
JOIN hdd ON hdd.id = movies.hdd_id AND movies.skip != 1
LEFT JOIN watch ON watch.ref = movies.tmdb_id AND watch.membre='$_SESSION[id]'
WHERE watch.id IS NULL
ORDER BY id DESC
LIMIT 20
答案 2 :(得分:1)
或者在不使用JOIN的情况下保持相同的样式(如果出于某种原因您更喜欢),您也可以执行以下操作:
SELECT movies.*
FROM movies, hdd
WHERE hdd.id = movies.hdd_id and hdd.status = '1' and movies.skip != '1' and
NOT EXISTS(SELECT 1 FROM watch WHERE watch.membre = '$_SESSION[id]' and watch.ref = movies.tmdb_id)
ORDER BY id desc
LIMIT 20