Help с запросом

mozz

Новичок
Help с запросом

Граждане Гуру!
Помогите пожалуйста с запросом.
Есть две таблицы:

tab1
id_object
name_object

tab2
id_oper
id_object
name_oper
data_nextoper

необходимо сделать выборку объектов с сортировкой по дате следущей операции, причем актуальной считается последняя операция над объектом.
конструкция типа:
SELECT tab1.name_object, tab2.name_oper, tab2.data_nextoper from tab1, tab2 where (tab2.data_nextoper=max(tab2.data_nextoper) and tab1.id_object=tab2.id_object)

не работает:-(

что можно придумать?
 

bomzh

Новичок
SELECT tab1.name_object, tab2.name_oper, tab2.data_nextoper
FROM tab1, tab2
WHERE tab1.id_object=tab2.id_object
ORDER BY tab2.data_nextoper DESC
 

mozz

Новичок
Спасибо конечно, но не совсем то что нужно...
Я не совсем правильно сформулировал проблему.
С каждым объектом совершается несколько последывательных операций, и при совершении каждой указывается дата следующей операции.
Нужно показать только актуальные операции (т.е. последнюю для каждого объекта) а далее отсортировать по возрастанию дат следующей операции.
без сортировки у меня сделано примерно так:

$sql="select * from tab1";
$result=$db->query($sql);
while ($row = $db->fetch_array($result)){
$sql2="select name_oper, data_nextoper from tab2 where id_object=".$row['id_object']." ORDER BY `data_nextoper` DESC LIMIT 0 , 1";
$result2=$db->query($sql2);
$row2 = $db->fetch_array($result2);
echo $row['name_object']." ".$row2['name_oper']." ".$row2['data_nextoper'];
}

такая конструкция выбирает последнюю операцию для каждого объекта, но не сортирует по дате перехода в следующее состояние (какой объект переводить в следующее состояние раньше)
Может в сторону массивов копать (загнать все в один массив и там сортировать)?
 

ru_skol

Новичок
select
tab1.name_object,
tab2.name_oper,
tab2.data_nextoper
from tab1, tab2
left join tab2 tab3 on tab3.id_object = tab1.id_object and tab3.data_nextoper > tab2.data_nextoper
where tab2.id_object = tab1.id_object and tab3.id_object is null
 
Сверху