Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php MySQL选择有关联和无关联的行_Php_Mysql_Subquery - Fatal编程技术网

Php MySQL选择有关联和无关联的行

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[

假设我有两个mysql表“movies”和“seed”

如果用户已经看过一部电影,“seed”表中有一条记录,其中包含他的userID和movieID

我必须打印所有电影,如果用户已经看过电影,则打印“已经观看”,否则打印“观看”

此时,我将PHP用于2个seprate查询:

<?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