Php MySQL选择有关联和无关联的行
假设我有两个mysql表“movies”和“seed” 如果用户已经看过一部电影,“seed”表中有一条记录,其中包含他的userID和movieID 我必须打印所有电影,如果用户已经看过电影,则打印“已经观看”,否则打印“观看” 此时,我将PHP用于2个seprate查询:Php MySQL选择有关联和无关联的行,php,mysql,subquery,Php,Mysql,Subquery,假设我有两个mysql表“movies”和“seed” 如果用户已经看过一部电影,“seed”表中有一条记录,其中包含他的userID和movieID 我必须打印所有电影,如果用户已经看过电影,则打印“已经观看”,否则打印“观看” 此时,我将PHP用于2个seprate查询: <?php $res = mysql_query( "SELECT * FROM movies" ); while( $row = mysql_fetch_assoc( $res ) ) { echo $row[
<?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"; }
}
您可以创建一个子查询,该查询汇总用户观看电影的次数:
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
这也将处理用户多次观看电影的情况
我使用的是移动设备,所以如果有任何打字错误,我深表歉意,但你应该明白这一点
SELECT * FROM `movies`
LEFT JOIN ( select movieName,'Watched' as w from seen where userId='$uid' ) s
on s.movieId=movies.movieId
当观看电影时,将给出wasted,否则将给出NULL。在这种情况下,您可以使用from LEFT JOIN,在LEFT JOIN中,您可以看到第一个表上的数据,而不是第二个表上的数据
SELECT * FROM movies LEFT JOIN seen ON movies.id = seen.movieID
若所见表格的数据在结果上,若未看到,则数据存在
此外,您还可以在解决方案中使用UNION和merge来查询我们只是不再这样做了。停止使用PHP的mysql\uAPI