2013-01-07 5 views
1

나는 아래에 나와있는 것처럼 두 개의 테이블을 가지고 있습니다. 아래에 나와있는 ID로 패드가 잘 작동하는 내림차순으로 추가되었습니다.mysql 질의 결과와 함께 지침이 필요합니다.

SELECT p.* FROM ruj_users_pad 
AS p LEFT JOIN ruj_users 
AS u ON p.user_id = u.id 
WHERE u.status !=0 
AND 1 
AND p.status = 1 
GROUP BY p.added_date 
DESC LIMIT 0, 20 

그러나, 지금은 또한 'ADDED_DATE'열으로 새로운 내림차순를 보여 이전 쿼리와 결합 세 번째 테이블을 검색하고 싶습니다. 세 번째 테이블의 데이터는 사용자가 패드에서 현재 항목을 클릭하여 좋아할 때 버튼에서 생성됩니다.

내가 갖고있는 것이지만 작동하지 않습니다.

SELECT p.*,f.added_date FROM ruj_users_pad 
AS p LEFT JOIN ruj_users 
AS u ON b.user_id=u.id 
LEFT JOIN ruj_users_fave 
AS f ON f.brag_id = u.id 
WHERE u.status !=0 
AND 1 
AND p.status = 1 
GROUP BY f.added_date DESC, b.added_date DESC 
LIMIT 0, 20 

결과는 첫 번째 결과와 동일하게 나타납니다. 나는 무엇이 잘못 될 수 있는지 이해하지 못합니다. 나는 ruj_users_fave에 엔트리가 있다는 것을 고려하여 그 결과가 첫 번째 결과와 결합하여 선호하는 패드를 맨 위에 가져오고 싶다.

도움을 주시면 대단히 감사하겠습니다.

+1

왜 내가 사용하지만'GROUP BY'가 결합 때문에 ORDER BY', 그리고, 질문과 관련이없는, s.bandara @ 당신의 쓰기에 대한 의도 '와 1' –

+0

무엇을'사용하지 않는 두 개의 열 added_date는 결과를 함께 그룹화합니다. 방금 ORDER BY를 시도했지만 동일한 결과가 나타납니다. –

+0

@ s.bandara 감사합니다.하지만 fave 테이블에서 즐겨 찾기에 추가 된 항목 만 반환합니다. 나는 모든 패드를 검색하고 쿼리는 즐겨 찾기 테이블에서 어떤 패드가 즐겨 찾기되었는지 확인하고 즐겨 찾기 항목의 날짜를 'ORDER BY'에 사용하는지 확인해야합니다. 그래서 패드가 추가되었지만 패드가 추가 된 직후 2 일 전부터 누군가가 자랑 스러웠다면, 그 즐겨 찾기 패드는 결과에 제일 먼저 나와야합니다. 왜냐하면 그것이리스트에 나타 내기 위해 즐겨 사용되었던 날짜를 사용해야하기 때문입니다. 더 많은 설명이 필요하면 알려주십시오. –

답변

1

두 개의 하위 쿼리를 병합하기 위해 UNION을 사용하여 문제를 해결할 수 있습니다. 세 가지 테이블의 전체 쿼리가 아니라 개념을 보여주기 위해 두 개의 테이블이있는 본질입니다. 테이블 pad과 테이블 likes을 사용합니다. 첫 번째 하위 쿼리는 패드의 id과 가장 최근의 "like"를 MAX과 함께 GROUP BY id과 함께 선택합니다. MAX(liked) 열의 이름을 timestamp으로 바꿉니다.

SELECT pad.id, MAX(liked) AS timestamp FROM 
pad INNER JOIN likes WHERE likes.pad_id = pad.id 
GROUP BY pad.id 

다른 부질 패드를 아직하지 않은 좋아 id들, 좋아하는 테이블은 특정 패드 id 존재에 대한 기록, 즉 선택한다. 이 경우 패드의 생성 날짜를 사용하여 반환되는 레코드의 순서를 결정해야합니다. 따라서 addedtimestamp으로 이름을 바꿉니다.

SELECT id, added AS timestamp FROM pad 
WHERE NOT EXISTS 
    (SELECT liked FROM likes WHERE likes.pad_id = pad.id) 

우리는 두 개의 하위 쿼리가 지금은 반환이 패드의 idtimestamp 그래서 우리는 UNION를 사용하여 하나의 결과 집합에 결합 할 수 있으며 BY timestamp 다음 ORDER. 조합 된 쿼리는 다음과 같습니다.

SELECT combined.id, combined.timestamp FROM 
(
    SELECT pad.id, MAX(liked) AS timestamp FROM 
    pad INNER JOIN likes WHERE likes.pad_id = pad.id 
    GROUP BY pad.id 
    UNION 
    SELECT id, added AS timestamp FROM pad 
    WHERE NOT EXISTS 
     (SELECT liked FROM likes WHERE likes.pad_id = pad.id) 
) 
combined ORDER BY combined.timestamp DESC; 
+0

응답 해 주셔서 감사합니다. 저는 지난 이틀 동안이 문제와 씨름하고 있으며, 제가 원하는대로 할 수 없기 때문에 다시 당신에게 연락하고 있습니다. 당신의 도움으로 지금 나의 새로운 문제가 있습니다. 내가 제공 한 코드를 사용했지만 추가 한 날짜가 없어서 좋아하지는 않습니다.그것이하는 것은 좋지 않은 말의 끝에 좋아하는 것을 추가하는 것입니다. 이 문제를 어떻게 해결할 수 있습니까? 귀하의 도움을 크게 주시면 감사하겠습니다. –

+0

방금 ​​조합 된 쿼리를 외부 쿼리에서 래핑하여 편집하여 결과를 올바르게 정렬합니다. 희망이 도움이됩니다. –

+0

도움 주셔서 감사합니다 !!! 그것은 작동! –

관련 문제