假设我有2个mysql表'电影'和'看过'
如果用户已经看过电影,则“看到”表格中有一条记录,其中包含用户ID和movieID
我必须打印所有电影,然后如果用户已经看过电影打印“已经看过”,否则“要观看”。
此时我使用PHP和2个单独的查询:
<?php
$res = mysql_query( "SELECT * FROM movies" );
while( $row = mysql_fetch_assoc( $res ) ) {
echo $row['movie_name'];
$res2 = mysql_query( "SELECT * FROM seen WHERE userID = '$uid' AND movieID = '$row[id]' LIMIT 1" );
if( mysql_num_rows( $res2 ) == 1 ) { echo "already watched"; } else { echo "to watch"; }
}
有一种方法可以通过一个查询进行操作吗?
通过“movies.id = seen.movieID”上的JOIN,它只会打印出已经播出的电影,其中包含“WHERE movies.id NOT IN(SELECT seen.movieID FROM FROM WHERE seen.userID ='$ uid') “它只打印未观看的内容..
答案 0 :(得分:1)
您可以创建一个子查询,汇总用户看过电影的次数:
SELECT m.userid, m.movieid,
case when s.seencount is null then 0 else 1 end as seenmovie
FROM movies m left join
(SELECT movieid, userid, count (id)
FROM seen
GROUP BY movieid, userid) as s on m.movieid = s.movieid and m.userid = s.userid
这也将处理用户多次观看电影的情况
我在移动设备上如果有任何拼写错误而道歉,但你应该明白这个想法
答案 1 :(得分:1)
SELECT * FROM `movies`
LEFT JOIN ( select movieName,'Watched' as w from seen where userId='$uid' ) s
on s.movieId=movies.movieId
观看电影时会看电视,否则会给出空白
答案 2 :(得分:1)
在这种情况下,您可以使用LEFT JOIN,在左连接中,您可以看到首先在桌面上的数据,而不是在第二个表格上。
SELECT * FROM movies LEFT JOIN seen ON movies.id = seen.movieID
如果看到的表的数据是否存在,如果用户没有看到,则存在结果数据。
您也可以在解决方案中使用UNION并合并查询