2016-04-07 4 views
0

У меня есть две таблицы: коллекции и collection_items.Mysql ограничение количества запросов

Я пытаюсь выяснить, как я могу выбрать для каждой коллекции, получить максимум 4 collection_items в том же запросе.

В некоторых коллекциях может быть более 4 предметов, но мне нужно всего лишь 4, чтобы показать.

Следующий запрос возвращает все элементы для каждой коллекции, но не знаю, как я могу ограничить его 4.

SELECT cn.*, o.url_thumb 
FROM collection_names as cn LEFT JOIN collection_items as ci ON ci.collection_id=cn.id 
    LEFT JOIN objects as o ON o.ID=ci.object_id 
WHERE cn.public=1 
ORDER BY cn.fecha DESC 
LIMIT 0, 20 

определение таблицы: enter image description here

+0

который 4 'collection_item' вы хотите показать? –

+0

@JuanCarlosOropeza Я не против заказа .. может быть случайным. – Apalabrados

+0

LIMIT 4 ........? –

ответ

0

Try это решение с использованием выделения из group row num и sub-query ,

select id, user_id, image_object_id, name, public, description, fecha, url_thumb 
from 
(
    select 
     *, 
     IF(id = @last_id, @grp_rn := @grp_rn + 1, @grp_rn := 1) as grp_rn 
    from 
    (
     SELECT cn.*, o.url_thumb 
     FROM collection_names as cn LEFT JOIN collection_items as ci ON ci.collection_id=cn.id 
      LEFT JOIN objects as o ON o.ID=ci.object_id 
     WHERE cn.public=1 
     ORDER BY cn.fecha DESC 
     LIMIT 0, 20 
    ) as t cross join (select @grp_rn := 0, @last_id := NULL) param 
    order by t.id 
) as t2 
where t2.grp_rn <=4; 
+0

Я получаю следующую ошибку: У вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее версии вашего MySQL-сервера, для правильного синтаксиса для использования рядом с «, url_thumb ( ) выберите *, 'в строке 1 – Apalabrados

+0

Привет, я отредактировал сообщение и включил определение таблицы collection_names. – Apalabrados

+0

Ну, теперь ошибка здесь: у вас есть ошибка в синтаксисе SQL, проверьте руководство, соответствующее вашей версии сервера MySQL, для правильного синтаксиса для использования рядом с 'select *, IF (id = last_id, grp_rn: = grp_rn + 1, grp_rn: = 'в строке 3 – Apalabrados

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