Вопрос про DISTINCT
292 сообщения
#14 лет назад
Привет всем. Имеется следующая табличка в БД:id user_id bids date
В таблице user_id повторяются часто, а мне нужно выбрать только уникальные записи, делаю такой запрос:
SELECT DISTINCT ('user_id') id,user_id,bids,date FROM table ORDER BY id DESC
Но, почему-то возвращаются все записи, вместо уникальных..Что не верно в моем запросе?
584 сообщения
292 сообщения
#14 лет назад
Эм...я конечно не спал сутки из-за этого проекта.Но, не совсем понял, о чем Вы?
584 сообщения
#14 лет назад
SELECT DISTINCT `user_id` FROM table
правильно работает? Да.. Значит где ошибка?
---
Как я понимаю Вам надо что-то вроде:
SELECT * FROM `table` WHERE` user_id` IN (SELECT DISTINCT `user_id` FROM `table`)
и еще надо выспаться, на свежую голову все быстрее и качественнее делается

292 сообщения
#14 лет назад
Цитата ("SField"):SELECT DISTINCT `user_id` FROM table
так да, работает

Цитата ("SField"):
SELECT * FROM `table` WHERE` user_id` IN (SELECT DISTINCT `user_id` FROM `table`)
А вот так - скорей всего будет. Буду пробовать

Цитата ("SField"):
и еще надо выспаться, на свежую голову все быстрее и качественнее делается
эт да..нада бы...

584 сообщения
#14 лет назад
На всякий случай, если будете продолжать работать, то напомню, что distinct работает по всем указанным полям, т.е. в вашем случае, запись будет считаться уникальна, если у неё разные id или даты...Цитата:
name | date
-----------------------
Vasya | 2010-01-02
Vasya | 2010-01-02
Vasya | 2010-01-03
SELECT DISTINCT name, date FROM table
вернет:
Цитата:
name | date
-----------------------
Vasya | 2010-01-02
Vasya | 2010-01-03
292 сообщения
#14 лет назад
Нет, такой вариант не подошел..все равно выдает все записи, хотя в 3-х из 4-х user_id одинаковый..Цитата ("SField"):
На всякий случай, если будете продолжать работать, то напомню, что distinct работает по всем указанным полям, т.е. в вашем случае, запись будет считаться уникальна, если у неё разные id или даты...
это я понимаю. В том и дело, что не могу понять, как выбрать все поля, но при этом для user_id сделать DISTINCT. Раньше так делал (первый пример) и все работало верно...
1172 сообщения
#14 лет назад
Цитата ("bel0v"):Нет, такой вариант не подошел..все равно выдает все записи, хотя в 3-х из 4-х user_id одинаковый..
Вам же только что объяснили. DISTINCT работает только когда ВСЕ (т.е. совершенно ВСЕ) поля одинаковые.
3240 сообщений
#14 лет назад
Цитата ("SField"):SELECT * FROM `table` WHERE` user_id` IN (SELECT DISTINCT `user_id` FROM `table`)
Это не является решением, так как вернет все записи, какие есть в таблице (при user_id не NULL).
3240 сообщений
#14 лет назад
bel0v, я же Вам уже подсказывал в предыдущем Вашем топике решение похожего случая: ссылкаНеужели Вы тот пример решения не разобрали? Если так, то может быть и смысла нет Вам помогать-то...
Ну ладно, вот одно из решений для текущего случая:
SELECT a.id, a.user_id, a.bids, a.date
FROM `table` a, (SELECT MIN(id) AS id FROM `table` GROUP BY user_id) b
WHERE a.id = b.id
ORDER BY a.id
Выводит первую запись (если id - автоинкремент) для каждого user_id.
То есть user_id будет уникальным, остальные же поля будут соответствовать первой записи для данного user_id.
292 сообщения
#14 лет назад
tvv, просто сначала Вы предложили если мне память не изменяет другой вариант, потому и не видел изменение поста, т.к. решил проблему примерно так же 
Спасибо, есть чему поучиться
