我希望我能解释这一点,但我正在构建一个INNER JOIN
查询的问题。让我试一试:我有一个朋友表,其中有一个 user1 和一个 user2 字段,这两个字段都可以是用户的朋友,具体取决于谁是邀请者,用户或朋友。现在,所有这些朋友当然也是用户自己,他们在各自的页面上发布消息。所有这些消息都存储在一个令人惊讶的名为“messages”的表中。我希望用户能够看到他所有朋友发布的所有消息并建立此消息,我创建了以下INNER JOIN
查询:
SELECT friends.user1, friends.user2, messages.message
FROM friends
INNER JOIN messages
WHERE (friends.user1 = 'Panda' OR friends.user2 = 'Panda') AND (friends.user1 != 'Panda' OR friends.user2 != 'Panda') AND messages.message != '' AND friends.accepted = '1'
(熊猫是课程的测试用户)。 会发生的事情是它确实选择了所有Panda的朋友并且它选择了这些朋友发布的所有消息,但是,我通过此查询获得了数万个结果,因为所有朋友都有一个朋友在结果中发布的消息。让我试着澄清一下:
假设Panda的朋友GalwayMonster发布了帖子:“Lees dit boek!”。 在上述查询的结果中,它将显示如下:
GalwayMonster“Lees dit boek!” PaddyPower“Lees dit boek!” 兄弟“Lees dit boek!” 猴子“Lees dit boek!” (不幸的是,SO不允许我发布截图,因为我还没有足够的声誉,所以我想现在必须这样做 - 对不起)
等等 - 它找到的每个朋友,它都会添加GalwayMonster发布给它的消息,并且它会对任何其他朋友发布的每个帖子都这样做。
显然,我希望向发布该帖的朋友显示正确的信息,如果朋友没有发布任何内容,我根本不希望该朋友出现。
这个查询我做错了什么?我是否需要添加一些内容才能让它只显示属于朋友的正确消息?
我希望我已经说清楚了,但如果您有任何其他问题,请告诉我。万分感谢!
答案 0 :(得分:0)
尝试使用
messages.message IS NOT NULL
而不是
messages.message != ""
这意味着两件不同的事情。也许这会解决您的问题,但是如果您可以提供表中的一些示例数据以及表中哪些列有帮助。如果您提供的话,我可以更新答案,如果这不解决它。
答案 1 :(得分:0)
您需要查看好友和消息表之间的关系,并调整您的查询,以便它只回收您想要查看的好友的消息。您可能希望使用添加到on
的{{1}}条件。
目前看来,您应用于邮件的唯一限制是邮件不是空白。
如果没有看到表中的列,则无法提供任何进一步的指示。
答案 2 :(得分:0)
我想我修好了。实际上不确定问题是什么,它给出了期望的结果(我验证结果是正确的)。我将其更改为以下内容,这样也可能对其他人有所帮助:
SELECT friends.user1, friends.user2, messages.message, messages.username, messages.remark, messages.posttime
FROM friends
INNER JOIN messages
WHERE messages.username != 'Panda' AND (messages.username = friends.user1 OR messages.username = friends.user2) AND (friends.user1 = 'Panda' OR friends.user2 = 'Panda') AND messages.message != '' AND messages.remark = ''
虽然看起来仍然有点长,但它确实有效,现在必须要做。我的一个朋友建议查看UNION或UNION ALL语句,看看它是否有用。无论如何,非常感谢你们帮助我的努力:)来自爱尔兰的干杯!