Таблица продуктов объединения SQL / PHP на таблицу с несколькими изображениями - PullRequest
0 голосов
/ 04 ноября 2018

У меня две таблицы ( продукты и изображения ). Изображения содержат ни одной, одной или даже больше записей для каждого продукта.

Я бы хотел присоединить два изображения (если доступно) к каждому продукту и как-то их отобразить. Я говорю о списке продуктов , ни одного продукта . Здесь возникает проблема.

Допустим, у меня есть эти таблицы:

Продукты:

id     | name
1      | Lenovo V310
2      | Adapter 5v
3      | Mousepad
4      | Gamepad Logitech
5      | Nokia 3210

Изображения:

id      | image_name    | product_id
1       | lenovo1.jpg   | 1
2       | lenovo2.jpg   | 1
3       | lenovo3.jpg   | 1
4       | lenovo4.jpg   | 1
5       | mousepad1.jpg | 3
6       | mousepad2.jpg | 3
7       | gamepad1.jpg  | 4
8       | gamepad2.jpg  | 4
9       | nokia1.png    | 5
10      | nokia2.png    | 5
11      | nokia3.png    | 5
12      | nokia4.png    | 5

Я бы хотел, чтобы мои продукты ( список продуктов , , а не один элемент ) отображались с двумя изображениями :

Пример: Lenovo V310 + lenovo1.jpg + lenovo2.jpg

Я пытался, но это не сработало. Как например:

    $q = "SELECT products.id, products.name, images.image_name FROM products LEFT JOIN images ON products.id = (SELECT product_id FROM images) LIMIT 6";
    $query = mysqli_query($dbc, $q);
    while ($row = mysqli_fetch_assoc($query)) {
        $id = $row['id'];
        $name = $row['name'];
        $image1 = $row['image_name']; // ain't working also with the query above
        $image2 = $row['image_name']; // how to take the second img????
        ..............

1 Ответ

0 голосов
/ 04 ноября 2018

Вы можете сделать это, используя GROUP_CONCAT

SQL:

SELECT p.id,
    p.name,
    GROUP_CONCAT(i.image_name ORDER BY i.image_name) AS images
FROM products p
LEFT JOIN images i ON p.id = i.product_id
GROUP BY p.id
LIMIT 6;

PHP:

$query = mysqli_query($dbc, $q);
while ($row = mysqli_fetch_assoc($query)) {
    $id = $row['id'];
    $name = $row['name'];
    $images = explode(',', $row['images']);
    $image1 = (count($images) > 0) ? $images[0] : null;
    $image2 = (count($images) > 1) ? $images[1] : null;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...