Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Составить запрос для связанных таблиц
Форумы портала PHP.SU » PHP » SQL и Архитектура БД » Составить запрос для связанных таблиц

Страниц (1): [1]
 

1. Koc - 06 Сентября, 2016 - 12:53:06 - перейти к сообщению
Помогите составить запрос, для связанных таблиц

Что имеем:

Цитата:
Таблица: post
id | name | published
1 | Пост 1 | 1
2 | Пост 2 | 0
3 | Пост 3 | 0
4 | Пост 4 | 1

Таблица: image
id | post_id | file
1 | 1 | img1.jpg
2 | 1 | img2.jpg
3 | 3 | img3.jpg
4 | 4 | img4.jpg


Нужно одним или несколькими запросами вытянуть все опубликованные посты (published = 1) с их картинками. Чтобы в итоге запрос вернул массив типа такого:

PHP:
скопировать код в буфер обмена
  1.  
  2.         [0] => array(
  3.                 'id' => '1',
  4.                 'name' => 'Пост 1',
  5.                 'images' => array(
  6.                         [0] => 'img1.jpg',
  7.                         [1] => 'img2.jpg',
  8.                 )
  9.         ),
  10.         [1] => array(
  11.                 'id' => '4',
  12.                 'name' => 'Пост 4',
  13.                 'images' => array(
  14.                         [0] => 'img4.jpg'
  15.                 )
  16.         )
  17. )
  18.  


Заранее спасибо!
2. armancho7777777 - 06 Сентября, 2016 - 17:27:05 - перейти к сообщению
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT p.id, p.name, p.published, img.files AS images
  2.   FROM post AS p
  3.   JOIN (SELECT post_id, GROUP_CONCAT(file SEPARATOR ',') AS files
  4.           FROM images GROUP BY post_id) AS img
  5.     ON img.post_id = p.id

Картинки будут разделены запятыми.
3. Koc - 08 Сентября, 2016 - 10:47:23 - перейти к сообщению
armancho7777777 пишет:
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT p.id, p.name, p.published, img.files AS images
  2.   FROM post AS p
  3.   JOIN (SELECT post_id, GROUP_CONCAT(file SEPARATOR ',') AS files
  4.           FROM images GROUP BY post_id) AS img
  5.     ON img.post_id = p.id

Картинки будут разделены запятыми.


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

 

Powered by ExBB FM 1.0 RC1