登录的用户的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/