humiliation
@humiliation
Чем больше знаю - тем больше дурак

Как достать все записи, привязанные к конкретной одной другой записи?

Приветствую, впал в ступор, давно не работал напрямую с мусклей, не могу понять - а можно ли сделать как нужно, или придется еще запрос отправлять.

Есть в общем база постов, у поста есть
post_id, post_name.

Есть база картинок к постам
image_id, post_id, image_local_href

Сначала хотел через промежуточную базу, но т.к. дальше с этими сущностями работы не будет, то и не стал (можете объяснить почему все же нужно было через промежуточную)

Далее достаю все записи

SELECT post_name, image_local_href FROM posts as p 
        LEFT JOIN images as img 
        ON img.post_id = p.post_id
        ORDER BY p.post_id DESC


Достается все верно, но! Если у поста 10 картинок, я получаю пост, кратно соответствующему ему числу картинок

[6]=>
  array(2) {
    ["post_name"]=>
    string(29) "a"
    ["image_local_href"]=>
    string(52) "C:/OpenServer/domains/vuerss/assets/images/35299.jpg"
  }
  [7]=>
  array(2) {
    ["post_name"]=>
    string(52) "b"
    ["image_local_href"]=>
    string(51) "C:/OpenServer/domains/vuerss/assets/images/3404.jpg"
  }
  [8]=>
  array(2) {
    ["post_name"]=>
    string(52) "b"
    ["image_local_href"]=>
    string(52) "C:/OpenServer/domains/vuerss/assets/images/95585.jpg"
  }
  [9]=>
  array(2) {
    ["post_name"]=>
    string(52) "b"
    ["image_local_href"]=>
    string(51) "C:/OpenServer/domains/vuerss/assets/images/7618.jpg"
  }


А теперь суть моего поста:

1) Можно ли достать сразу из базы записи таким образом, чтобы пост b содержал в себе сразу нужные мне доп. выбранные поля и не дублировался из-за каждой картинки?
2) Если невозможно, стоит ли переделать поля базы? Посоветуйте более удобный вариант. Все таки стоит использовать промежуточную базу один-ко-многим?
3) Обработать выборку уже непосредственно в пхп и сформировать массив там?
4) Вытащить подгрузку картинок к постам в отдельную апи (пишу апи, фронт на вьюжс) и инициировать после подгрузки постов? (не хочу плодить запросы)
5) Оставить массив как есть и разбирать его на фронте?
  • Вопрос задан
  • 119 просмотров
Пригласить эксперта
Ответы на вопрос 1
kimono
@kimono
Web developer
Измените запрос на:
SELECT post_name, GROUP_CONCAT(image_local_href SEPARATOR '|') AS images
FROM posts AS p
LEFT JOIN images AS img 
ON img.post_id = p.post_id
GROUP BY p.id
ORDER BY p.post_id DESC

На выходе получаем:
id : post_name      : images
1  : 'hello world'  : 'img1.jpg|img2.jpg'
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы