gpt4 book ai didi

php - MYSQL JOIN 多个表不返回结果

转载 作者:行者123 更新时间:2023-11-29 15:37:10 25 4
gpt4 key购买 nike

好吧,让我们看看,但是,一旦 friend 帖子完成,我的查询就工作正常。如果用户没有 friend ,则不会返回任何结果,这就是我想要掌握的...

    $query = "SELECT DISTINCT m.id, p.byuser, p.`newpost`, p.`id`, p.`postdate`
FROM users m
JOIN pinnwand p
ON m.id = p.byuser
JOIN friends f
ON f.`userid` = m.id OR f.`friendid` = m.id
WHERE (f.`userid` = $myId OR f.`friendid`= $myId)
AND (p.`touser` = p.`byuser` OR p.`touser` = $myId)
AND p.`publicp` < 3
AND p.`typ` = 2
ORDER BY p.id DESC LIMIT $limit, 10";

我希望有人能帮助我,也许我只是对 nao 视而不见......

<小时/>

编辑由于史蒂文为我提供了很多帮助,也许有人发现最后一点丢失了:它只是显示为特定用户发布的帖子。即使据我了解这个查询,它也应该得到 friend 在他们的记事板上发表的帖子?毕竟m.id也应该获得friendtables值,还是我错了?

<小时/>

编辑2因此,当我现在使用 UNION 和子查询方法时,我仍然想描述结果应该是什么样子:

显示:用户帖子在任何地方发布,帖子由任何人在用户板上发布, friend 帖子在他们自己的板上发布!不是 friend 板上的帖子。

最佳答案

有两个问题:

  1. 您需要对 friend 进行LEFT JOINLEFT JOIN 表示返回连接中第一个表中的所有记录,即使在连接中的第二个表中没有找到结果。您还应该将与 friends 相关的 WHERE 子句条件放入 LEFT JOIN 子句中,以便条件在连接处发生。您还应该在连接中尽可能使用 m.id 而不是 $myId 来消除冗余。
  2. 您的 WHERE 子句限制性太强(冗余条件)。始终使用尽可能简单的条件集,并在 JOIN 中放置尽可能多的条件,以便它们更易于阅读。

示例(也进行编辑以添加 friend 的帖子):

$query = "SELECT DISTINCT `u`.`id`, `p`.`byuser`, `p`.`newpost`, `p`.`id`, `p`.`postdate`
FROM `users` AS `u`
LEFT JOIN `friends` AS `f`
ON `f`.`userid` = `u`.`id`
OR `f`.`friendid` = `u`.`id`
JOIN `pinnwand` AS `p`
/* This will get all posts made by the user */
ON `p`.`byuser` = `u`.`id`
/* This will get all posts made TO the user by friends */
OR (`p`.`byuser` IN (`f`.`userid`, `f`.`friendid`)
AND `p`.`touser` = `u`.`id`)
WHERE `u`.`id` = {$myId}
AND `p`.`publicp` < 3
AND `p`.`typ` = 2
ORDER BY `p`.`id` DESC
LIMIT {$limit}, 10";

关于php - MYSQL JOIN 多个表不返回结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58126191/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com