2012-03-27 74 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"); 

它汇集了我的所有歌曲,并从我的数据库相关联的favorite信息。

这是一个基本的分页查询,从我的分贝的天团返回值:

$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

歌曲列信息:songs schema

我的最爱:favorites schema

收藏夹之间的相关性并且歌曲非常简单,其中favoritesfavorite值保存了它最喜欢的歌曲的唯一id

我的问题是我将如何结合这两个查询,以返回原查询中的所有信息,但分组和分页,因为它是在第二个查询?

回答

0

我不使用MySQL,也不熟悉使用“限制”,但是这个脚本可能工作。与收藏夹左连接不应增加行数并追加列。这个“限制”还会在外部脚本上起作用吗?

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 2012-03-27 04:08:37

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',它可以工作,但是分组/排序不起作用。它将返回20行,当我限制到10开始'星期三12月31日' – ian 2012-03-27 04:19:57

+0

它似乎是..根据最喜欢的计数分组或排序,而不是日期和歌曲?屏幕截图:http://cl.ly/0y3P020y363O0t1d3004 – ian 2012-03-27 04:28:08