2014-10-11 4 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 쿼리에서 둘 다 결합하고 싶습니다. 행이 조합이 중복 행을 제거 할 것이라는 점을 명심하십시오 (다음 P = 후, F =)

어디에서 오는 당신이 볼 수있는 여분의 열이 사전

+0

간단한 'UNION/UNION ALL'을 사용하는 것은 어떻습니까? –

+0

@ JoachimIsaksson은 아직도 익숙하지 않지만 첫 번째 대답부터 사용 했으므로 사용해야 할 것 같아 –

답변

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'를 추가 할 수 있다고 생각합니다. 잃을 수도 있습니다. 그렇지 않으면 주문. –

+0

상관 없어 나는 타임 스탬프 @ JoachimIsaksson에 의해 PHP로 구성됩니다 –

+0

쿼리에서 결과를 결정하고 정렬을 위해 그냥 collumn을 추가하십시오. 좋은 하루 되세요 :) – VoonArt

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 

감사드립니다. 모든 행을보고 싶다면 UNION ALL

+0

답장을 보내 주셔서 감사합니다. 답장을 모두 보내 주시면 정확하고 도움이되었습니다. 불행히도 나는 다른 답변으로 가야했다. 왜냐하면 그것은 처음 이었기 때문에 나는 여전히 바리에게 대답 해 주었다. –

관련 문제