Всем привет. у меня следующая задача. имеются четыре таблицы, клиент, проект, этап, документ. все они связаны по id задача: нужно вывести по одному клиенту, так чтобы у каждого клиента выводился последний проект, у проекта вывводился последний этап и документ. то есть все последние добавленные записи по клиенту. пробовал вот такой запрос, но не то $result="SELECT clientt.id_clientt, proekt.id_proekt, clientt.name_clientt, proekt.name_proekt, etap.name_etap, etap.id_etap, dokument.id_dokument, dokument.name_dokument FROM clientt, proekt, etap, dokument WHERE clientt.id_clientt=proekt.id_clientt and proekt.id_proekt=etap.id_proekt and proekt.id_proekt=dokument.id_proekt and etap.id_etap=dokument.id_etap GROUP BY clientt.id_clientt DESC ";
а где max??? я пробовал ставить max(id_proekt), но тогда только одну запись выводит. а мне нужно чтобы каждого клиента
никого это не смутило? или я чего то не в курсе? ORDER BY MAX(id_proekt) ?? вы же сортируете, а не выбираете...
ну а как мне переделать запрос??? пишу вместо GROUP BY clientt.id_clientt DESC пишу ORDER BY MAX(id_proekt) он выдает ошибку на функции mysql_fetch_array
mysql_query($result) or die(mysql_error()); Добавлено спустя 26 секунд: у вас там ошибка происходит, а какая мы догадаться не можем
ну так естественно... GROUP BY clientt.id_clientt DESC так нельзя делать. DESC относится к операции сортировки, а не группировки... как вы можете группировать по увеличению или уменьшению? можно группировать по коробкам, например, людям или отделам... но не по росту макак из мадагаскара
если такой запрос $result="SELECT clientt.id_clientt, proekt.id_proekt, clientt.name_clientt, proekt.name_proekt, etap.name_etap,etap.id_etap, dokument.id_dokument, dokument.name_dokument FROM clientt, proekt, etap, dokument WHERE clientt.id_clientt=proekt.id_clientt and proekt.id_proekt=etap.id_proekt and proekt.id_proekt=dokument.id_proekt and etap.id_etap=dokument.id_etap ORDER BY MAX(id_proekt) "; то ошибка:Column 'id_proekt' in order clause is ambiguous если $result="SELECT clientt.id_clientt, max(proekt.id_proekt), clientt.name_clientt, proekt.name_proekt, etap.name_etap,etap.id_etap, dokument.id_dokument, dokument.name_dokument FROM clientt, proekt, etap, dokument WHERE clientt.id_clientt=proekt.id_clientt and proekt.id_proekt=etap.id_proekt and proekt.id_proekt=dokument.id_proekt and etap.id_etap=dokument.id_etap ORDER BY MAX(proekt.id_proekt) "; то выдает не правильно. выдает только одного клиента, а нужно всех каждого в строку(но это уже php). и все-равно не попоследнему проекту, этапу и документу
пробовал. все-равно неправильно выводится( ну же, гуру программирования, кто-нибудь поможет??? Добавлено спустя 15 минут 43 секунды: у меня вообще что-то странное творится, он выводит уже не первый и не последний проект, а где -то по середине. в чем проблема может быть??? может у кого-то встречалась подобная задача???
Поле, по которому спрашиваете, автоинкрементное? Записи в процессе работы удаляются время от времени выборочно? Если да, то гуглите, что такое разреженные ключи. Узнаете много интересного, включая то, почему максимальный ID может оказаться в середине таблицы.
Можно. См доку Добавлено спустя 7 минут 26 секунд: Ваша задача решается с использованием подзапросов. Что-то вроде: Код (Text): SELECT * FROM clientt left join proekt on proekt.id = (select max(id) from proekt where proekt.id_clientt = clientt.id_clientt) left join etap on etap.id = (select (max(id) from etap where etap.id_proekt = proekt.id_proekt) left join dokument on dokument.id = (select (max(id) from dokument where dokument.id_proekt = proekt.id_proekt) т.е. сначала получаете максимальный ИД записи, а потом считываете запись(данные) по этому ИД.
всем большущее спасибо, особенно Chushkin!!! вроде всё получилось и выводится как надо, по крайней мере пока. вот код. $result="SELECT * FROM clientt left join proekt on proekt.id_proekt = (select max(id_proekt) from proekt where proekt.id_clientt = clientt.id_clientt) left join etap on etap.id_etap = (select max(id_etap) from etap where etap.id_proekt = proekt.id_proekt) left join dokument on dokument.id_dokument = (select max(id_dokument) from dokument where dokument.id_proekt = proekt.id_proekt)";