如何使用PHP和mySQL从5个表中进行选择/连接

如何使用PHP和mySQL从5个表中进行选择/连接,php,mysql,join,distinct,Php,Mysql,Join,Distinct,我正试图基于5个表中的字段构建一个审阅记录: 我已经标记了我需要的所有列,但目前我只是检索所有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.whisk

我正试图基于5个表中的字段构建一个审阅记录:

我已经标记了我需要的所有列,但目前我只是检索所有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)和威士忌名称(字符串)组成。

1)您不能得到多个相同的行,因为您使用的是DISTINCT。(你说的倍数是指重复吗?)


2) 您得到的字段为空,因为您使用的是LEFT JOIN,并且您的表无法联接(某些“ON子句”无法计算为true)

结果表明,我的查询没有任何问题。我正在使用其数据库的人没有维护它,因此对同一产品和用户有多个评论,其中只有总体评分不同。此外,还有许多关于甚至不存在的产品的评论。我应该先仔细看看数据库,因为删除所有错误的行解决了我的问题。感谢您的所有输入。

左联接表示“即使我要联接的表上没有匹配的记录,也请将左侧的所有记录都给我”。左连接和右连接的最终结果通常是对应表的空字段。如果您只想要连接条件为真的情况,请将“左”改为“内”。您能提供一些示例数据和您想要的示例吗?@ChrisRasco我明白,请参阅我编辑的帖子。@GordonLinoff我发布的图片显示了我正在查询的表的结构。我编辑了我的帖子,以澄清我在结果中需要什么。我会把一些样本数据放在一起,以进一步澄清。你能发布一些你得到的重复记录吗?根据查询,我不确定您为什么会得到它们,并且根据结构和您的查询,它不是很明显。1)这就是我理解DISTINCT子句要完成的,但是是的,我指的是重复行。2) 我知道左连接本质上会创建空字段,但是根据数据库中的数据,查询结果包含太多空条目。这听起来很奇怪。这不应该发生。你能提供一些数据吗?也许可以用像sqlfiddle这样的东西?