选择用户未观看的所有电影,并将结果限制为20

时间:2018-08-18 23:23:05

标签: mysql sql mysqli phpmyadmin

嘿,我需要选择用户尚未观看的所有电影...

我获取最近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

但是,这当然行不通。我认为输出是向后的...而不是返回未观看的内容,而是返回已观看的电影。任何帮助将不胜感激

3 个答案:

答案 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