Задавайте вопросы, мы ответим
Вы не зашли.
Здравствуйте. Подскажите, пожалуйста.
В базе есть некие записи разделенные по определенному признаку
Нужно получить уникальные значения до первого разделителя,
В базе
один
два:три
два:семь
четыре:пять:шесть
четыре:восемь:девять
должно получиться три записи на вывод
один
два
четыре
И также до второго разделителя с указанием первого, например семь
В базе
один:два
три:четыре:пять
шесть
семь:восемь
семь:девять:десять
семь:одиннадцать:двенадцать
Должно получиться две записи на вывод
восемь
девять
одиннадцать
Подскажите, как такое реализовать
Отредактированно platedz (27.09.2015 00:51:11)
Неактивен
https://dev.mysql.com/doc/refman/5.0/en … ion_locate
и
https://dev.mysql.com/doc/refman/5.0/en … ring-index
в помощь.
Неактивен
И как же мне запросить только уникальные значения?
Неактивен
distinct или group by, что больше нравится.
Неактивен
Ну по идее-то наверное, когда количество считать не надо то distinct, а когда надо group by.
Так что и с тем и с тем пригодятся.
Неактивен
Если нужно только количество, то лучше select count(distinct field) from t;
Неактивен
Ну такое не надо я думаю. Запрос меня больше интересует все-таки. Как мне получить уникальные значения до разделителя. Указанным вами примерам я не нашел практического применения.
Отредактированно platedz (27.09.2015 10:38:31)
Неактивен
а после where substring_index не применяется?
Неактивен
А не просто название поля просто поменялось. Спасибо. Вроде вышло.
Неактивен
Подскажите пожалуйста. Почему
Отредактированно platedz (27.09.2015 18:11:05)
Неактивен
потому что distinct действует на все поля, который в select выбираются.
Насчет того, как правильно сделать - тут Вам виднее. Но если смотреть на изначальную постановку задачи - зачем Вам вообще id?
Или давайте по простому - скиньте show create table t и insert into t ( а лучше создайте на sqlfiddle )
и приведите результат, который хотите получить.
Неактивен
>select distinct substring_index(metka,':',1) as metka, id from table
а где же использование функции locate? которая вообще-то ищет нужный Вам разделитель. и результат передаете в substring_index.
Неактивен
Так я и без locate, получаю необходимую запись. Зачем мне он? substring_index в любом случае возвращает необходимую запись, ее же не обязательно урезать
Мне надо так, только чтобы id тоже был
http://sqlfiddle.com/#!9/657c7/4/0
А я получаю так
http://sqlfiddle.com/#!9/657c7/5/0
Неактивен
platedz написал:
Мне надо так, только чтобы id тоже был
http://sqlfiddle.com/#!9/657c7/4/0
substring_index(metka,':',1) одинаковый у нескольких строк, а id у этих строк разный. Какой id должен быть в ответе?
Неактивен
там не только id. Так что желательно, чтобы можно было отсортировать, получив я думаю, последний в первую очередь задав какое-либо поле конкретное. В целом чтобы можно было отсортировать по убыванию по возрастанию.
Неактивен
Сортировка идет уже после группировки.
Вначале вам нужно указать какие строки должны быть выбраны из каждой группы, см Группировка в MySQL
Неактивен
Ну сортировка дело второстепенно. Вы мне лучше скажите, как мне получить уникальные значения только одного поля до разделителя.
Чтобы у мне при запросе substring_index(metka,':',1) было на выводе не три раза "один" как здесь http://sqlfiddle.com/#!9/657c7/5/0
А чтобы я получил уникальное значения как тут http://sqlfiddle.com/#!9/657c7/4/0. Но чтобы я мог также и другие поля указать в запросе.
Неактивен
Неактивен
Что-то видимо непонял. Спасибо. На Вашем примере разобрался
Отредактированно platedz (28.09.2015 07:37:59)
Неактивен