Вам бонус- начислено 1 монета за дневную активность. Сейчас у вас 1 монета

Как в mySQL выбрать всех пользователей,и три их последних фото( или группы и три последних фото для каждой группы)

Практика




Как в 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....
создано: 2013-08-08
обновлено: 2021-03-13
289



Рейтиг 10 of 10. count vote: 2
Вы довольны ?:


Поделиться:

Найди готовое или заработай

С нашими удобными сервисами без комиссии*

Как это работает? | Узнать цену?

Найти исполнителя
$0 / весь год.
  • У вас есть задание, но нет времени его делать
  • Вы хотите найти профессионала для выплнения задания
  • Возможно примерение функции гаранта на сделку
  • Приорететная поддержка
  • идеально подходит для студентов, у которых нет времени для решения заданий
Готовое решение
$0 / весь год.
  • Вы можите продать(исполнителем) или купить(заказчиком) готовое решение
  • Вам предоставят готовое решение
  • Будет предоставлено в минимальные сроки т.к. задание уже готовое
  • Вы получите базовую гарантию 8 дней
  • Вы можете заработать на материалах
  • подходит как для студентов так и для преподавателей
Я исполнитель
$0 / весь год.
  • Вы профессионал своего дела
  • У вас есть опыт и желание зарабатывать
  • Вы хотите помочь в решении задач или написании работ
  • Возможно примерение функции гаранта на сделку
  • подходит для опытных студентов так и для преподавателей

Комментарии


Оставить комментарий
Если у вас есть какое-либо предложение, идея, благодарность или комментарий, не стесняйтесь писать. Мы очень ценим отзывы и рады услышать ваше мнение.
To reply

Базы данных - MySql (Maria DB)

Термины: Базы данных - MySql (Maria DB)