Forum Webscript.Ru

Общие => Базы данных => Тема начата: Nickolaz от 08 Февраля 2007, 22:52:20

Название: Сложности с запросом
Отправлено: Nickolaz от 08 Февраля 2007, 22:52:20
Есть такие таблички:
orders
Id
name

status
Id
s_name
s_ord

status_order
Id
o_id
s_id


в табличке status_order - связь двух других таблиц "многие ко многим".
В s_ord - порядок следования статусов.
Надо выбрать за один запрос все name, а также один связанный статус, причем максимальный по s_ord.

что-то я запутался мыслями (
Название: Сложности с запросом
Отправлено: html_coder от 09 Февраля 2007, 19:58:32
СУБД какая?
Название: Сложности с запросом
Отправлено: Nickolaz от 09 Февраля 2007, 22:20:09
mysql
Название: Сложности с запросом
Отправлено: Nickolaz от 13 Февраля 2007, 12:47:44
версия - 4.0, поэтому вложенные запросы не работают :(
Решение нашел через временную таблицу + добавление к ней индекса

create temporary table temp_tab
select os.o_id,max(oss.s_ord) as mx
from status oss,status_order os
where os.st_id=oss.Id
group by os.o_id;
alter table temp_tab add index(o_id);
select o.Id,oss.s_name
from orders o
left join temp_tab h on h.o_id=o.Id
left join status oss on oss.s_ord=h.mx
group by o.Id;
drop table if exists temp_tab;


Хотелось бы это решить за один единственный запрос, если это возможно. Если нет - хочу просто в этом удостовериться, чтоб мастер какой-нибудь сказал "Это сделать нельзя" :)
К тому же в данном случае поле порядка - s_ord - должно быть уникальным. На практике это соблюдается, но хотелось бы, чтобы запрос работал и с дублирующимися значениями порядка.