Правильная связка MYSQL запроса

277
20 мая 2017, 20:31

Существует три таблицы.

  • Товары
  • Пользователи
  • Фотографии

Задача стоит такая. Необходимо показать списком 10 товаров указать имя человека который добавил этот товар и также показать фотографию этого товара если она есть.

Связь между товаром и пользователем обязательно должна находить друг друга. Если пользователя не существует то товар не выводится. А вот связь между товаром и фотографиями не обязательно. Тоесть если товар существует но фотографии для этого товара нет то все равно выводим этот товар.

Вот что у меня получилось.

SELECT A.name, B.name as user_name, C.foto
FROM items A
INNER JOIN users B ON A.user_id = B.id
LEFT JOIN foto C ON A.id = C.item_id
LIMIT 0,10

Все работает быстро и примерно даже так как мне необходимо. Проблема заключается в том, что если у товара существует больше чем одна фотография, товар выводится столько раз сколько у него фотографий. Решил использовать

GROUP BY A.id

После чего в разы увеличилось время на обработку запроса.

Как посоветуете сделать такую связку?

Answer 1
SELECT A.name
     , B.name as user_name
     , (    SELECT f.foto 
            FROM foto f 
            WHERE A.id = f.item_id 
            /* ORDER BY f.priority */ 
            LIMIT 1
       ) AS foto
FROM items A
INNER JOIN users B ON A.user_id = B.id
LIMIT 0,10;
READ ALSO
Объединение двух связей belongsToMany в одну Laravel

Объединение двух связей belongsToMany в одну Laravel

ЗдравствуйтеПодскажите, кто может

294
Не переносится строка в коде php

Не переносится строка в коде php

Есть простенький кодНа почту приходит $message в одну строку

234
Как вывести static переменную из функции?

Как вывести static переменную из функции?

Хочу чтобы переменная возвращала количество вызовов функции

294
Генератор уникальных ID

Генератор уникальных ID

Нужен код генератора уникальных IDПоискал в интернете

242