繁体   English   中英

如何合并2个复杂的mysql查询

[英]How can I combine 2 complex mysql queries

因此,我有两个MySQL查询,如果我有结合的知识,我会但不知道,这就是为什么我转向“ SO”的原因,在那种情况下,我没有尝试任何事情,因为它超出了我的范围。 我想将所有查询合并为一个查询,如果无法实现,请告诉我。

查询一个“这将选择您所有的朋友帖子,包括您的帖子”:

"SELECT b.*, c.photo, d.name, e.status 
FROM post b 
INNER JOIN profile c 
INNER JOIN user d 
INNER JOIN user_friendship e 
ON b.from_user = c.user_id 
AND b.from_user = d.id 
AND e.friend_id = b.from_user 
WHERE e.status = :status 
AND e.user_id = :id
ORDER BY b.id DESC LIMIT 20"

查询两个“这将选择您要发布的所有人员”:

"SELECT b.*, c.photo, d.name, e.status
FROM post b
INNER JOIN profile c 
INNER JOIN user d 
INNER JOIN user_follower e 
ON b.from_user = c.user_id 
AND b.from_user = d.id 
AND e.to_id = b.from_user 
WHERE e.status = :status 
AND e.who_id = :id
ORDER BY b.id DESC LIMIT 20"

我结合了这些,但仅与php结合。 我想将两者合并在一个MySQL查询中 提前致谢

SELECT *
FROM
  (SELECT b.*,
          c.photo,
          d.name,
          e.status
   FROM post b
   INNER JOIN profile c
   INNER JOIN USER d
   INNER JOIN user_friendship e ON b.from_user = c.user_id
   AND b.from_user = d.id
   AND e.friend_id = b.from_user
   WHERE e.status = :status
     AND e.user_id = :id LIMIT 20
   UNION SELECT b.*,
                c.photo,
                d.name,
                e.status
   FROM post b
   INNER JOIN profile c
   INNER JOIN USER d
   INNER JOIN user_follower e ON b.from_user = c.user_id
   AND b.from_user = d.id
   AND e.to_id = b.from_user
   WHERE e.status = :status
     AND e.who_id = :id LIMIT 20 ) MainQuery
ORDER BY id DESC
SELECT b.*, c.photo, d.name, e.status, "P" 
FROM post b 
INNER JOIN profile c 
INNER JOIN user d 
INNER JOIN user_friendship e 
ON b.from_user = c.user_id 
AND b.from_user = d.id 
AND e.friend_id = b.from_user 
WHERE e.status = :status 
AND e.user_id = :id
ORDER BY b.id DESC LIMIT 20
UNION
SELECT b.*, c.photo, d.name, e.status, "F"
FROM post b
INNER JOIN profile c 
INNER JOIN user d 
INNER JOIN user_follower e 
ON b.from_user = c.user_id 
AND b.from_user = d.id 
AND e.to_id = b.from_user 
WHERE e.status = :status 
AND e.who_id = :id
ORDER BY b.id DESC LIMIT 20

通过额外的列,您可以看到行的来源(P =发布,F =跟随)

请记住,联合将删除重复的行。 如果要查看所有行,请使用UNION ALL

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM