left join и сортировка данных

web2master
На сайте с 13.06.2012
Offline
33
672

Здраствуйте, столкнулся с проблемой при выборке данных из нескольких таблиц.

первая таблица item:

id,name

вторая таблица cost:

id,item_id,sum,data (в формате time())

вторая таблица skidki:

id,item_id,sum,data (в формате time())

пишу запрос типа:

select a.*

from item a

left join cost b on b.item_id=a.id

left join skidki c on c.item_id=a.id

group by a.id;

в результате получаю список товаров и первые записи в двух других таблицах, а мне нужно получить данные из таблиц cost и skidki отсортированные по data desc. подскажите как это сделать? замучился уже

нужен получить список товаров и данные о стоимости и скидках последние по датам.

Не отвлекайте Платонов по такой ерунде как индексация ваших сайтов... parser.web2master.ru (parser.web2master.ru)
IL
На сайте с 20.04.2007
Offline
435
#1

Если я правильно понимаю, то вся сложность в том, что нужно выбрать не само максимальное значение, а запись (другое поле этой записи, точнее), с максимальным значением другого поля (жаль, что "оно само" не понимает что-то вроде "where date = MAX(date)" /без добавления JOIN-а/)

Возможно, устроит вариант "типа" (в оригинальном запросе не увидел полей b.sum as sum, c.sum as skidka)

select a.*, b.sum AS sum, c.sum AS skidka
from `item` a
left join (SELECT * FROM `cost` ORDER by `data` DESC) b on b.item_id=a.id
left join (SELECT * FROM `skidki` ORDER by `data` DESC) c on c.item_id=a.id
group by a.id;

p.s. Есть ощущение, что реализация далека от оптимальной. Вариант с размещением последней цены и скидки дополнительным полем в таблицу item совсем не рассматривался?

... :) Облачные серверы от RegRu - промокод 3F85-3D10-806D-7224 ( http://levik.info/regru )
web2master
На сайте с 13.06.2012
Offline
33
#2

select a.*, b.sum AS sum, c.sum AS skidka

from `item` a
left join (SELECT * FROM `cost` ORDER by `data` DESC) b on b.item_id=a.id
left join (SELECT * FROM `skidki` ORDER by `data` DESC) c on c.item_id=a.id
group by a.id;

спасибо за помощь, сейчас потестирую на скорость этот вариант. а по поводу добавить последнее значение в item тоже имеет право жить. спасибо

minor
На сайте с 04.10.2010
Offline
70
#3
select a.*
from item a
left join cost b on b.item_id=a.id
left join skidki c on c.item_id=a.id
group by a.id;
order by b.data, c.data DESC

Если так попробывать?

PHP experience 2 year, comprehend seo
web2master
На сайте с 13.06.2012
Offline
33
#4

minor, я сначала так и делал, но вывод товаров сортирует.. а мне нужно чтобы список товаров выводился как есть, типа ORDER BY item.id ASC

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий