我有三张桌子。
|-----------------|
| user_id | Name |
|-----------------|
| 1 | Raj |
|-----------------|
| 2 | Khaj |
|-----------------|
| 3 |Khujli |
|-----------------|
|--------------------------------------|
| post_id | Title | Desc |
|--------------------------------------|
| 1 | test1 | hello |
|--------------------------------------|
| 2 | test 2 | Hello World |
|--------------------------------------|
|--------------------------------------------------|
| comment_id | post_id | user_id | comment |
|--------------------------------------------------|
| 1 | 1 | 1 | Nice |
|--------------------------------------------------|
| 2 | 2 | 1 | Bad Thing |
|--------------------------------------------------|
| 3 | 2 | 2 | Hulla |
|--------------------------------------------------|
| 4 | 1 | A | Lol |
|--------------------------------------------------|
| 5 | 2 | A | Arse |
|--------------------------------------------------|
| 6 | 1 | 3 | Nice |
|--------------------------------------------------|
现在我正在使用查询:
SELECT *
FROM tbl_comment, tbl_post, tbl_user
WHERE tbl_post.post_id = tbl_comment.post_id
AND tbl_post.post_id = '$post_id'
AND (tbl_user.user_id = tbl_comment.user_id
OR (tbl_comment.user_id = 'A'
AND tbl_post.post_id = '$post_id'))
user_id = 'A'
表示管理员,但未列在tbl_user
表中。它仅在tbl_comment表中被称为'A'
。
通过上述查询,我在user_id = 'A'
对特定帖子发表的评论中获得了两行。
如何解决此问题?查看图片,两行具有相同的值。我想要唯一的行,而不是重复的行。
答案 0 :(得分:0)
试试这个(未经过测试)
SELECT *
FROM tbl_comment
INNER JOIN tbl_post ON tbl_post.post_id = tbl_comment.post_id
LEFT JOIN tbl_user ON tbl_user.user_id = tbl_comment.user_id
WHERE tbl_comment.post_id = '$post_id'
我强烈建议使用JOIN ON
子句来连接表格 - 更易读,更容易解决问题。
答案 1 :(得分:0)
您正在获取重复项,因为在WHERE
子句的第二部分中,您不对 tbl_user 表施加任何限制。因此,对于 tbl_user 表中的每条记录,当评论的用户ID为“A”时,您的输出中会重复出现。
我还建议您使用ANSI语法来关注连接表,如下所示:
SELECT *
FROM tbl_comment
INNER JOIN tbl_post
ON tbl_post.post_id = tbl_comment.post_id
LEFT JOIN tbl_user
ON tbl_user.user_id = tbl_comment.user_id
WHERE tbl_post.post_id = '$post_id'
AND (tbl_user.user_id IS NOT NULL OR tbl_comment.user_id = 'A')
WHERE
子句中的最后一行是可选的,但如果您的注释表中存在无效的用户ID值,则可能是必要的。根据您的期望,您可能不希望输出这些记录。