Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: выбрать все записи без повторов... DISTINCT

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Описание: гугл и яндекс не рулят - пробовал )))
zuher
Отправлено: 14 Марта, 2016 - 19:55:19
Post Id



Новичок


Покинул форум
Сообщений всего: 26
Дата рег-ции: Янв. 2013  
Откуда: Тула


Помог: 0 раз(а)




Здравствуйте. Есть такой запрос:
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT * FROM neformatnoe2013.cms_content WHERE published='1' AND uroven='0' AND category_id='33' ORDER BY id DESC LIMIT 16


Но мне надо чтобы запись была уникальна по user_id (т.е. один трек от пользователя, не больше). Попробовал так:
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT DISTINCT user_id FROM neformatnoe2013.cms_content WHERE published='1' AND uroven='0' AND category_id='33' ORDER BY id DESC LIMIT 16


Выбирается только уникально поле user_id, а остальные записи из таблицы не вынимаются.
Помогите пожалуйста написать правильный запрос
 
 Top
MiksIr
Отправлено: 14 Марта, 2016 - 19:59:02
Post Id


Забанен


Покинул форум
Сообщений всего: 378
Дата рег-ции: Сент. 2014  


Помог: 10 раз(а)

[+]


Одна запись - какая именно, любая?


-----
self-banned
 
 Top
zuher
Отправлено: 14 Марта, 2016 - 20:03:12
Post Id



Новичок


Покинул форум
Сообщений всего: 26
Дата рег-ции: Янв. 2013  
Откуда: Тула


Помог: 0 раз(а)




MiksIr пишет:
Одна запись - какая именно, любая?


По второму запросу он у меня выбирает все user_id, а остальные поля не выбирает (там около 20 полей), а надо наоборот выбрать все 20 записей, но чтобы две и более записей с одинаковым полем user_id не выбирались
 
 Top
MiksIr
Отправлено: 14 Марта, 2016 - 20:05:13
Post Id


Забанен


Покинул форум
Сообщений всего: 378
Дата рег-ции: Сент. 2014  


Помог: 10 раз(а)

[+]


Воспрос был - из 5 записей с одинаковым user_id - какую именно запись показать?


-----
self-banned
 
 Top
Мелкий Супермодератор
Отправлено: 14 Марта, 2016 - 20:05:38
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




Postgresql:
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT DISTINCT ON (user_id) user_id, /*остальные поля*/
  2. FROM neformatnoe2013.cms_content  WHERE published='1' AND uroven='0' AND category_id='33' ORDER BY user_id, id DESC LIMIT 16


Mysql. Общего решения нет. Частное, т.к. сортировка по id, возможно, но не лучшее:
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT /*поля*/ FROM neformatnoe2013.cms_content JOIN (
  2. SELECT max(id) AS lastid FROM neformatnoe2013.cms_content WHERE published='1' AND uroven='0' AND category_id='33' GROUP BY user_id ORDER BY lastid DESC LIMIT 16
  3. ) lastuser ON lastid=id


-----
PostgreSQL DBA
 
 Top
zuher
Отправлено: 14 Марта, 2016 - 20:07:13
Post Id



Новичок


Покинул форум
Сообщений всего: 26
Дата рег-ции: Янв. 2013  
Откуда: Тула


Помог: 0 раз(а)




MiksIr пишет:
Воспрос был - из 5 записей с одинаковым user_id - какую именно запись показать?

Ну наверное логичнее последнюю
 
 Top
MiksIr
Отправлено: 14 Марта, 2016 - 20:10:56
Post Id


Забанен


Покинул форум
Сообщений всего: 378
Дата рег-ции: Сент. 2014  


Помог: 10 раз(а)

[+]


Кому логично, кому нет, экстрасенсов тут нет

CODE (sql):
скопировать код в буфер обмена
  1. SELECT a.*
  2.   FROM neformatnoe2013.cms_content a
  3.       LEFT JOIN  neformatnoe2013.cms_content b
  4.       ON a.user_id=b.user_id AND a.id < b.id
  5.             AND b.published='1' AND b.uroven='0' AND b.category_id='33'
  6.   WHERE a.published='1' AND a.uroven='0' AND a.category_id='33' AND b.id IS NULL


Поправил чуток

(Отредактировано автором: 14 Марта, 2016 - 20:17:23)



-----
self-banned
 
 Top
zuher
Отправлено: 14 Марта, 2016 - 20:19:59
Post Id



Новичок


Покинул форум
Сообщений всего: 26
Дата рег-ции: Янв. 2013  
Откуда: Тула


Помог: 0 раз(а)




Мелкий
На первый пример:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'ON (user_id) user_id, seolink,ifile,title,golos,gorod,zhanrtext FROM

MiksIr
Попробовал Ваш код, страница висела минуты полторы(это на локалке!!!) а потом вывела всё что угодно, но не DESC
Радость Радость Радость
Выхвачены случайные треки по всей базе, а не последние загруженные )))
 
 Top
MiksIr
Отправлено: 14 Марта, 2016 - 20:21:17
Post Id


Забанен


Покинул форум
Сообщений всего: 378
Дата рег-ции: Сент. 2014  


Помог: 10 раз(а)

[+]


Поправленный попробовали?
Что бы не висело - на user_id, published, uroven и category_id должны быть индексы.


-----
self-banned
 
 Top
zuher
Отправлено: 14 Марта, 2016 - 20:25:55
Post Id



Новичок


Покинул форум
Сообщений всего: 26
Дата рег-ции: Янв. 2013  
Откуда: Тула


Помог: 0 раз(а)




Мелкий
Второй вариант твоего кода помог, спасибнуть не могу, рейтинга не хватает )))) Здорово Выпьем!
Спасибище всем за помощь!!!
(Добавление)
MiksIr пишет:
Поправленный попробовали?
Что бы не висело - на user_id, published, uroven и category_id должны быть индексы.

Да, после того как отписался, ещё поправленный попробовал - висеть перестало, но результат тот же. Он выкинул записи с 2009 по 2016 год, т.е. совершенно не последние )))
Помог вариант МЕЛКОГО
 
 Top
Мелкий Супермодератор
Отправлено: 14 Марта, 2016 - 20:37:20
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




zuher пишет:
На первый пример:

Ну так я же написал, что это для postgresql


-----
PostgreSQL DBA
 
 Top
MiksIr
Отправлено: 14 Марта, 2016 - 20:52:42
Post Id


Забанен


Покинул форум
Сообщений всего: 378
Дата рег-ции: Сент. 2014  


Помог: 10 раз(а)

[+]


zuher пишет:
Он выкинул записи с 2009 по 2016 год, т.е. совершенно не последние

Значит запрос неверно набрали. Должен выводить записи с максимальным id для каждого user_id. Классическая задача поиска первой/последней записи в группе.


-----
self-banned
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« SQL и Архитектура БД »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB