php - JOIN 不检索行

标签 php mysql

登录的用户的userid=8。我希望查询返回产品表中的所有行,但如果 userid=8 已投票,则不显示喜欢或不喜欢的代码。

对于下面的查询,没有返回任何行。我不必在投票表中插入每个用户 ID(每个产品的用户太多)。正确的做法是什么?

$query=  mysql_query("SELECT rate.voted as rvote, child.* FROM products child JOIN vote rate on child.id=rate.parentid WHERE rate.userid='8'") or die(mysql_error());

投票表

id | parentid |   userid |   voted  |
 1 |    1     |     6    |    1     |
 2 |    2     |     6    |    1     |
 3 |    1     |     4    |    1     |
 4 |    3     |     6    |    1     |

产品表

id |     name     |
 1 |     bottled  |
 2 |     grain    |
 3 |     milk     |
 4 |     bread    |

php

while($row=mysql_fetch_assoc($query)) {
$name = $row['name'];
$vote = $row['rvote'];

   echo $name;

   if($vote!=1) {
//like or dislike code
}



}

最佳答案

以下是如何使用 JOIN 返回用户 8 的结果:

SELECT v.voted, p.*
FROM product p
LEFT JOIN vote v
  ON v.userid = 8
  AND v.parent_id = p.id
对于已投票的产品,

voted 将为 1,否则为 NULL

在产品表的 id 列上有一个索引,在 vote 表上有一个多列索引,其中包含列 (userid,parent_id),它应该相当快。

关于php - JOIN 不检索行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9419461/

相关文章:

phpbb - 允许访客查看主题但不能查看帖子

php - 使用 FETCH_KEY_PAIR 从 PDO 读取数组

php - 为什么 "if"语句会导致 "while"循环卡住浏览器?

php - 在 PDO 查询的 where 子句中处理可能的空值

php - mysql_escape_string 图像 url 问题

带有嵌套 FROM (SELECT) 的 php sql UPDATE

php - 在 64 位 Windows 平台上运行 PHP - 问题?

php - mySQL 使用数据表进行搜索

MySql Innodb 表奇怪 SELECT 锁定/超时

mysql - ORDER BY WHERE IN(子查询)