Существует три таблицы.
Задача стоит такая. Необходимо показать списком 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
После чего в разы увеличилось время на обработку запроса.
Как посоветуете сделать такую связку?
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;
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Хочу чтобы переменная возвращала количество вызовов функции