假设我有 2 个 mysql 表 'movies' 和 'seen'
如果用户已经看过一部电影,则在“已看”表中有一条记录,其中包含他的用户 ID 和电影 ID
我必须打印所有 电影,然后如果用户已经看过电影,则打印“已观看”,否则打印“观看”。
此时我使用 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 seen WHERE seen.userID = '$uid' ) "它只打印未观看的..
最佳答案
在这种情况下,您可以使用 from LEFT JOIN,在左联接中,您可以看到第一个表中的数据,而不是第二个表中的数据。
SELECT * FROM movies LEFT JOIN seen ON movies.id = seen.movieID
如果看到表的数据在结果数据上存在,如果不是用户没有看到。
您也可以在您的解决方案中使用 UNION 并合并查询
关于php - MySQL选择有和没有关系的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37360261/