Олег Б.
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 сообщения
#14 лет назад
SELECT DISTINCT ('user_id') id,user_id,bids,date FROM table ORDER BY id DESC


Будьте внимательней, не надо сюда писать из-за каждой запятой

Олег Б.
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 работает только когда ВСЕ (т.е. совершенно ВСЕ) поля одинаковые.
Олег Б.
292 сообщения
#14 лет назад
Топик закрыть можно, переписал запрос малость, заработало.
Вадим Т.
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, просто сначала Вы предложили если мне память не изменяет другой вариант, потому и не видел изменение поста, т.к. решил проблему примерно так же
Спасибо, есть чему поучиться
Себастьян Ф.
584 сообщения
#14 лет назад
Цитата ("tvv"):
Цитата ("SField"):
SELECT * FROM `table` WHERE` user_id` IN (SELECT DISTINCT `user_id` FROM `table`)

Это не является решением, так как вернет все записи, какие есть в таблице (при user_id не NULL).


действительно, я глупость написал