php
  • mysql
  • 2012-03-27 3 views 0 likes 
    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()); 
    

    Вот информация столбца для двух таблиц songs и favorites

    Песен: songs schema

    Избранные: favorites schema

    Корреляция между избранными и песни довольно просты, где значение 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

    получал: «Неизвестный столбец« b.ID »в разделе« on », но менял« b »на« B », и он работает, однако группировка/сортировка не работают. Он возвращает 20 строк, когда я ограничу до 10 запусков 'Wed Dec 31st' – ian

    +0

    Кажется, что ... группировка или заказ по любимому счету, а не по дням и песням? Скриншот: http://cl.ly/0y3P020y363O0t1d3004 – ian

    Смежные вопросы