首页 > 解决方案 > 选择用户未观看的所有电影并将结果限制为 20

问题描述

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

获取最后 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
 

但这当然行不通。我认为输出是向后的。它不是返回未观看的内容,而是返回已观看的电影。

标签: mysqlsql

解决方案


您需要从已观看的整个列表中筛选电影。使用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

推荐阅读