Объясню на пальцах что хочет от вас человек, ибо сейчас сам столкнулся с проблемой.
если вы выполняете запрос:
select DISTINCT (`field1`) from `table`
вы получите вывод всех уникальных field1
а если вы выполняете запрос:
select DISTINCT (`field1`),`field2` from `table`
вы получите вывод всех field1 и field2, то есть получается, что:
select DISTINCT (`field1`),`field2` from `table` == select `field1`,`field2` from `table`
иными словами нельзя получить идентификаторы записей, если вы спрашиваете уникальные имена людей из таблицы. Вы сможете получить только сами уникальные имена.
Далее:
GROUP BY - не решает эту проблему. Он вообще тогда выводит левые записи.
select DISTINCT (`field1`),`field2` from `table` - я попросил своего друга проверить этот запрос. Вначале он кричал, что я ламер и у меня ошибка в ДНК (ну, по-дружески так), а потом ... залип.
Мы предположили, что во всем виновата клятая суксь, и потому проверили все это на никсах. Результат оказался тот же.
Иными словами, аггрегатная функция работает только тогда, когда вы больше не просите включить в результат еще одно поле. Либо вы получаете уникальные значения имен людей (без возможности узнать какой идентификатор id записи принадлежит имени), либо DISTINCT просто не срабатывает и в запрос включаются все записи.
Я кончил
З.Ы. жду ответов тех, кто уже решил эту проблему, ибо пока что вместо одного запроса мне приходится использовать индийский код:
Так, например, задачу по выводу пяти последних сообщений в форуме, темы которых не повторяются, мне пришлось решать в два этапа:
- вначале я сделал пробежку по всем id-постам и набрал в массив 5 уникальных номеров id (через in_array)
- затем сделал запрос через select * from `table` where id in (массив с id)
К сожалению, эта проблема решается вот так по-индийски не в первый раз и я уже даже аккаунт сделал здесь, чтобы получить ответ.
-~{}~ 07.04.08 06:05:
Забыл добавить: mysql 5.0.x, php 5.2