Итак, у меня есть две таблицы.
Таблица элементов:
+---------+-----------+
| item_id | item_name |
+---------+-----------+
| 1 | Item One |
| 2 | Item Two |
+---------+-----------+
Таблица изображений:
+---------+----------------------+
| item_id | item_image |
+---------+----------------------+
| 1 | clofr9ohuvex5cxeyrfm |
| 1 | slnorjbqfd2x7ks0marp |
| 1 | oomkjtomvasklx9be4sq |
| 2 | um8donrpeuvfrmqb7qt |
| 2 | lowcvoaijxniiqdj5eoe |
| 2 | qwxfartcsdyusw4lrngi |
+---------+----------------------+
Мой php-код, чтобы получить список элементов со своими ассоциативными изображениями:
$itemsQuery = $db->prepare("
SELECT *
FROM items a,item_images b
WHERE a.item_id = b.item_id
");
$itemsQuery->execute();
$items = $itemsQuery->fetchAll(PDO::FETCH_ASSOC);
var_dump($items);
Я получаю 6 результатов вместо 2.
Я хочу показать два элемента, присутствующих в "таблице элементов", с их ассоциативными изображениями из "таблицы изображений" на основе item_id.
Я могу запросить "таблицу элементов" и пропустить его, чтобы запросить базу данных еще раз, чтобы получить изображения. Но как я могу это сделать в одном вызове базы данных?
Вы можете использовать GROUP_CONCAT
чтобы заставить MySQL сгруппировать все значения из второй таблицы в один столбец для вас:
SELECT
a.*, GROUP_CONCAT(b.item_image) AS item_images
FROM
items a,item_images b
WHERE
a.item_id = b.item_id
GROUP BY
a.item_id
Результат будет ключ под названием item_images
, которые содержат каждый item_image
для этого item
, отделенного ,
:
um8donrpeuvfrmqb7qt,lowcvoaijxniiqdj5eoe,qwxfartcsdyusw4lrngi
Затем вы можете использовать explode
на стороне PHP, если хотите, чтобы он был как массив.