2012-03-27 4 views
0

이 기존 쿼리입니다 :이 두 쿼리를 어떻게 결합합니까?

$query = mysql_query("SELECT s.*, 
UNIX_TIMESTAMP(`date`) AS `date`, 
f.userid as favoritehash FROM songs s 
LEFT JOIN favorites f ON f.favorite = s.id AND f.userid = '$userhash' 
ORDER BY s.date DESC"); 

그것은 내 모든 노래와 내 DB에서 관련 favorite 정보를 수집합니다.

이 일의 그룹에 의해 내 DB에서 값을 반환하는 기본 매김 쿼리입니다 : songs schema

: 여기

$query = mysql_query(" 
     select * from songs t1 join (
     select to_days(date) day from songs 
     group by day 
     order by day desc 
     limit $start_row, $items_per_page 
     ) t2 
     on to_days(t1.date) = t2.day 
     order by day desc") or die(mysql_error()); 

은 두 테이블 songsfavorites

노래에 대한 열 정보입니다

즐겨 찾기 :

즐겨 찾기 그리고 노래는 favorite 값이 favorites 인 매우 간단합니다. 즐겨 찾는 노래는 id입니다.

제 질문은 두 쿼리를 결합하여 원래 쿼리의 모든 정보를 반환하지만 두 번째 쿼리와 같이 그룹화되고 페이지가 매겨진 방법은 무엇입니까?

답변

0

MySQL을 사용하지 않고 "제한"사용에 익숙하지 않지만이 스크립트가 작동 할 수도 있습니다. 즐겨 찾기가있는 LEFT JOIN은 행 수를 늘리고 열을 추가해서는 안됩니다. "제한"이 외부 스크립트에도 적용됩니까?

select s.*,UNIX_TIMESTAMP(`date`) AS `date`, f.userid as favoritehash 
from songs s 
     join (
       select to_days(date) day 
       from songs 
       group by to_days(date) 
       order by day desc 
       limit $start_row, $items_per_page 
      ) s2 on to_days(s.date) = s2.day 
    LEFT JOIN favorites f ON f.favorite = s.id AND f.userid = '$userhash' 
+0

나는 시도 것을 제공 할 것입니다. 이 사용법에서'limit'은 어떤 행을 시작할 지와 얼마나 많은 시간을 반환할지 쿼리에 알려줍니다. 리턴되는 행 수를 제한합니다. – ian

0
SELECT B.* 
FROM favorites as A 
JOIN ( 
    select * from songs t1 join (
     select to_days(date) day from songs 
     group by day 
     order by day desc 
     limit $start_row, $items_per_page 
     ) t2 
     on to_days(t1.date) = t2.day 
     order by day desc 
) as B 
ON A.Favorite = B.ID 
ORDER BY B.DAY, B.ID 
+0

은 'on clause'에'b.ID '컬럼을 알지 못했지만'b'를'B'로 변경했으나 그룹핑/정렬이 작동하지 않습니다. 'Wed Dec 31st Wed 12 월 31 일 시작'으로 제한하면 20 행을 반환합니다 – ian

+0

며칠이나 노래보다는 좋아하는 수를 그룹화하거나 주문하는 것 같습니다. 스크린 샷 : http://cl.ly/0y3P020y363O0t1d3004 – ian

관련 문제