如何使用PHP和mySQL选择/连接5个表

时间:2013-09-16 01:51:44

标签: php mysql join distinct

我正在尝试根据5个表中的字段构建审核记录:

enter image description here

我已经标记了我需要的所有列,但目前我只是检索所有user_rating表。

这是我到目前为止所拥有的:

SELECT DISTINCT user_rating.*, whiskey.name, user_notes.overall, users.image, user_rate.rate_number
    FROM user_rating
    LEFT JOIN whiskey ON whiskey.id = user_rating.whiskeyid
    LEFT JOIN users ON users.username = user_rating.username
    LEFT JOIN user_notes ON user_notes.username = user_rating.username AND user_rating.whiskeyid = user_notes.whiskey_id
    LEFT JOIN user_rate ON user_rate.whiskey_id = user_rating.whiskeyid AND user_rate.username = user_rating.username
    ORDER BY user_rating.id DESC

起初我认为这给了我想要的结果,但后来我注意到我得到了多行以及太多的空字段。任何帮助将不胜感激。

编辑:

多行表示重复行。另外,我知道左连接在连接的右侧产生空值。我想说的是,由于数据在数据库中,我得到的空值超出了应有的值。

为了澄清,我正在尝试使用最新列出的最新评论列表。每个评论包含一个用户名,11个类别(每个类别是一个整数值),总体评级(int值),注释(字符串),图像(URL)和威士忌名称(字符串)。

2 个答案:

答案 0 :(得分:0)

1)您无法获得多个SAME行,因为您使用的是DISTINCT。 (多个是指复制?)

2)你得到空字段,因为你正在使用LEFT JOIN并且你的表不能被连接(一些“ON子句”不能被评估为真)

答案 1 :(得分:0)

事实证明我的查询没有任何问题。我正在使用的数据库没有维护它的人因此对同一产品和用户进行了多次评论,其中只有整体评级不同。此外,对于甚至不存在的产品有很多评论。我应该仔细查看数据库,因为删除所有错误的行解决了我的问题。感谢您的所有投入。

相关问题