2013-11-18 4 views
1

со следующей таблицей:Ограничение числа LEFT JOIN группы

SELECT i.*, GROUP_CONCAT(t.name) tagList 
FROM items AS i 
LEFT JOIN tag_rel AS tr ON (tr.item = j.id) 
LEFT JOIN tags AS t ON (t.id = tr.tag) 
GROUP BY i.id 
ORDER BY i.id DESC 

есть способ ограничить элементы tagList? Вместо того, чтобы давать мне все теги (в некоторых случаях - 30+), могу ли я ограничить его, т. Е. 5?

+1

Как о 'LIMIT 5' в конце запроса – Linger

+1

Какие 5 вы хотите выбрать? – eggyal

+0

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

ответ

1
SELECT i.*, SUBSTRING_INDEX(GROUP_CONCAT(t.name SEPARATOR ','), ',', 5) tagList 
FROM items AS i 
LEFT JOIN tag_rel AS tr ON (tr.item = j.id) 
LEFT JOIN tags AS t ON (t.id = tr.tag) 
GROUP BY i.id 
ORDER BY i.id DESC 

Просто замените 5 с номером желаемого

+1

Надеюсь, нет имени с ',' в нем :) –

+0

Да, в него встроены некоторые (разумные) предположения. – Mihai

+0

Удивительный! Могу ли я спросить, является ли это предпочтительным (производительность?) Только получение 5 первых элементов «t.name» в php? То, что я делал, это $ taglist = explode (',', $ row ['tagList']), чтобы получить массив, я мог бы просто отобразить 5 первых элементов массива. Это то же самое? – James