php - MySQL选择有和没有关系的行

标签 php mysql subquery

假设我有 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.movi​​eID”上使用 JOIN 时,它只打印观看过的电影,“WHERE movies.id NOT IN ( SELECT seen.movi​​eID 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/

相关文章:

php - 使用 PHP 发送邮件时如何删除 "via"和服务器名称?

mysql - 在 MyISAM 表上执行 `ALTER TABLE my_table ENGINE InnoDB` 没有任何效果。为什么?

mysql - 比较两个mysql数据库中的数据

mysql - 如何将 FROM 子句中的子查询复制到 2 个别名以进行自连接?

php - 如何在JQuery中访问php数据?

php - 从表中删除行后维护连续索引值

php - 如何在 php 中获取此 mysql 查询的两行的总和值

mysql - 在本地开发服务器上升级 phpmyadmin

mysql - 子查询在我的 SQL 查询中返回多于 1 行

mysql - 选择参与事件的 4 位用户个人资料图片 (mysql)