如何使用不相关的数据连接三​​个MySQL表?

时间:2017-05-07 15:21:41

标签: php mysql

所以我有一个网页,显示有关它的图像和信息,我也有三个表。

IMAGES                             USERS                        COMMENTS
id                                 user_id                      id
user_id                            username                     user_id
username                           password                     comment
title                              isadmin                      date
image (location)                   points
description                        signup_date
points                             email
category                           city
                                   bio
                                   profile_image

我需要使用图片和评论表中的所有信息。但我还需要检索发布评论和图像的用户的profile_image。我无法弄清楚如何做到这一点:这是我到目前为止所做的。

$conn = new PDO ("mysql:host=localhost;dbname=project", "root", "pass");
$stmt = $conn->prepare("
SELECT images.*, users.profile_image, comments.* 
FROM (images.id JOIN comments ON images.id = comments.id) 
LEFT JOIN users 
ON images.user_id = user.profile_image
");

我关门了吗?或者在这里尝试不可能的事情!?

3 个答案:

答案 0 :(得分:1)

这比你想的要简单得多:)

表格不是无关的,它们都有相同的密钥 - user_id,这就是你加入它们的方式。

您的查询应如下所示:

SELECT images.*, users.profile_image, comments.* 
FROM images 
JOIN users ON images.user_id = users.user_id
JOIN comments ON comments.user_id = users.user_id AND images.id = comments.id

这假设images.idcomments.id匹配(我怀疑他们没有 - 但你没有给我们足够的信息)

查看您的表格结构,评论和图片似乎没有连接,因此可以单独查询它们以避免重复和放大令人困惑的数据

<强> --- --- UPDATE

假设您已将image_id添加到comments,这是您的查询:

SELECT images.*, users.profile_image, comments.* 
FROM images 
LEFT JOIN users ON images.user_id = users.user_id
LEFT JOIN comments ON comments.user_id = users.user_id AND images.id = comments.image_id

LEFT JOIN的作用是返回“图像”,这些图像不一定与“用户”或“评论”相关联。

答案 1 :(得分:0)

我想这可以解决问题: SELECT i。*,u.profile_image,c。* 来自图像我 LEFT JOIN注释c ON i.user_id = c.user_id LEFT JOIN用户u ON i.user_id = u.user_id

答案 2 :(得分:0)

我认为是:

>   SELECT  images.*, users.profile_image, comments.* 
>       FROM images
>      INNER JOIN users ON images.user_id= users.user_id
>      INNER JOIN comments ON users.user_id= comments.user_id