Как в mySQL выбрать всех пользователей,и три их последних фото( или группы и три последних фото для каждой группы)
желательно одним запросом и так чтобы получить каждую строку уникальную вида
нужно получить
iduser nameuser ph1 ph2 ph3
из двух таблиц
iuser nameuser
1 вася
2 петя
id id_user ph_name
1 1 слон
2 1 стол
3 1 диван
4 2 небо
5 3 вода
6 2 море
SELECT
alb.*,
us.username ,
us.id AS uid,
(SELECT ph.src FROM photo ph
WHERE ph.albumId=alb.id ORDER BY ph.id DESC LIMIT 1) AS pics,
(SELECT ph.src FROM photo ph
WHERE ph.albumId=alb.id ORDER BY ph.id DESC LIMIT 2,1) AS pic1,
(SELECT ph.src FROM photo ph
WHERE ph.albumId=alb.id ORDER BY ph.id DESC LIMIT 3,1) AS pic2,
(SELECT ph.src FROM photo ph
WHERE ph.albumId=alb.id ORDER BY ph.id DESC LIMIT 4,1) AS pic3,
FROM album alb
JOIN user us ON us.id=alb.userId
where LOWER(alb.name) RLIKE concat('[[:<:]]',?s,'')
AND ISNULL(alb.groupId)
но думаю что он не совсем оптимальный, может кто лучше что то предложит
если для пользователя 3 последних фото из каждого альбома
то можно так
SELECT
us.*, alb.*, COUNT(ph.id) AS counter, GROUP_CONCAT(ph.src SEPARATOR ', ') AS f
FROM
user us
left JOIN album alb ON alb.userId = us.id
left JOIN photo ph ON ph.albumId = alb.id
GROUP BY
us.id
#HAVING counter <= 5
ORDER BY
us.id
DESC;
то есть для того чтобы как бы вернуть несколько столбцов одной строкой mysql
можно воспользоваться
GROUP_CONCAT- Объединением значений группы
GROUP_CONCAT([DISTINCT] expr [, expr ...]
[ORDER BY {unsigned_integer|col_name|expr}
[ASC|DESC] [, col_name ...]]
[SEPARATOR str_val])
жаль что нет limit для GROUP_CONCAT
к сожалению почему то при использовании GROUP_CONCAT и GROUP BY вместо вложенных SELECT даже с группировкой по вложенным полям запрос выполняятся 0,014 с что в два раза медленнее чем с вложенным, хоть explain показывает что в 4 раза больше просмотр записей идет, может потому что еще мало записей , к сожалению пока нет времени проверит
и еще запрос немного сложнее... но суть такая же..
кстате, еще можно применить что то вроде такой конструкции
select ... concat(field1, ',', field2...)
from....
Комментарии
Оставить комментарий
Базы данных - MySql (Maria DB)
Термины: Базы данных - MySql (Maria DB)