2014-10-11 40 views
1

所以我有兩個MySQL查詢,如果我有知識結合我會,但我不這樣,這就是爲什麼我轉向「所以」,在那種情況下,我沒有嘗試任何事情,因爲它超出了我的範圍。我想將所有查詢結合在一起,如果這不可能,請告訴我。我如何結合2複雜的MySQL查詢

查詢一個「此選擇你的朋友的帖子,包括你的」:

"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查詢中將兩者結合起來。在此先感謝

+0

如何使用簡單的'聯盟/聯盟所有'? – 2014-10-11 08:02:00

+0

@JoachimIsaksson仍然不熟悉,但自第一個答案使用,我想我將不得不使用該 – 2014-10-11 08:03:55

回答

2
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 
+0

我想你可以在'UNION'本身之外添加'ORDER BY',我懷疑你可能會失去否則排序。 – 2014-10-11 08:03:44

+0

無所謂,我會用時間戳組織php @JoachimIsaksson – 2014-10-11 08:05:15

+0

只需添加collumn來確定從查詢結果和排序。祝你有個美好的一天:) – VoonArt 2014-10-11 08:08:45

2
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

+0

感謝您的回答,我收到的兩個答案都是正確的,並幫助我。不幸的是,我不得不採取其他答案,因爲它是第一次,但我仍然贊成你的答案,再次感謝巴里 – 2014-10-11 09:30:13