Автор Тема: Сложности с запросом  (Прочитано 3558 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Nickolaz

  • Завсегдатай
  • Новичок
  • *
  • Сообщений: 38
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Сложности с запросом
« : 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

  • Фанат форума
  • Старожил
  • ****
  • Сообщений: 427
  • +0/-0
  • 0
    • Просмотр профиля
Сложности с запросом
« Ответ #1 : 09 Февраля 2007, 19:58:32 »
СУБД какая?

Оффлайн Nickolaz

  • Завсегдатай
  • Новичок
  • *
  • Сообщений: 38
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Сложности с запросом
« Ответ #2 : 09 Февраля 2007, 22:20:09 »
mysql

Оффлайн Nickolaz

  • Завсегдатай
  • Новичок
  • *
  • Сообщений: 38
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Сложности с запросом
« Ответ #3 : 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 - должно быть уникальным. На практике это соблюдается, но хотелось бы, чтобы запрос работал и с дублирующимися значениями порядка.

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28