SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 27.09.2015 00:32:06

platedz
Старожил
Зарегистрирован: 27.03.2012
Сообщений: 314

Выборка like или regexp

Здравствуйте. Подскажите, пожалуйста.
В базе есть некие записи разделенные по определенному признаку
Нужно получить уникальные значения до первого разделителя,

В базе

один
два:три
два:семь
четыре:пять:шесть
четыре:восемь:девять

должно получиться три записи на вывод
один
два
четыре

И также до второго разделителя с указанием первого, например семь

В базе

один:два
три:четыре:пять
шесть
семь:восемь
семь:девять:десять
семь:одиннадцать:двенадцать

Должно получиться две записи на вывод
восемь
девять
одиннадцать

Подскажите, как такое реализовать

Отредактированно platedz (27.09.2015 00:51:11)


Wazzup.su - это сервис объединивший в себе все в одном.

Неактивен

 

#2 27.09.2015 09:40:42

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

Re: Выборка like или regexp


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#3 27.09.2015 10:06:52

platedz
Старожил
Зарегистрирован: 27.03.2012
Сообщений: 314

Re: Выборка like или regexp

И как же мне запросить только уникальные значения?


Wazzup.su - это сервис объединивший в себе все в одном.

Неактивен

 

#4 27.09.2015 10:10:30

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

Re: Выборка like или regexp

distinct или group by, что больше нравится.


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#5 27.09.2015 10:21:43

platedz
Старожил
Зарегистрирован: 27.03.2012
Сообщений: 314

Re: Выборка like или regexp

Ну по идее-то наверное, когда количество считать не надо то distinct, а когда надо group by.
Так что и с тем и с тем пригодятся.


Wazzup.su - это сервис объединивший в себе все в одном.

Неактивен

 

#6 27.09.2015 10:26:09

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

Re: Выборка like или regexp

Если нужно только количество, то лучше select count(distinct field) from t;


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#7 27.09.2015 10:36:25

platedz
Старожил
Зарегистрирован: 27.03.2012
Сообщений: 314

Re: Выборка like или regexp

Ну такое не надо я думаю. Запрос меня больше интересует все-таки. Как мне получить уникальные значения до разделителя. Указанным вами примерам я не нашел практического применения.

Отредактированно platedz (27.09.2015 10:38:31)


Wazzup.su - это сервис объединивший в себе все в одном.

Неактивен

 

#8 27.09.2015 11:21:07

platedz
Старожил
Зарегистрирован: 27.03.2012
Сообщений: 314

Re: Выборка like или regexp

а после where substring_index не применяется?


Wazzup.su - это сервис объединивший в себе все в одном.

Неактивен

 

#9 27.09.2015 11:30:11

platedz
Старожил
Зарегистрирован: 27.03.2012
Сообщений: 314

Re: Выборка like или regexp

А не просто название поля просто поменялось. Спасибо. Вроде вышло.


Wazzup.su - это сервис объединивший в себе все в одном.

Неактивен

 

#10 27.09.2015 17:57:51

platedz
Старожил
Зарегистрирован: 27.03.2012
Сообщений: 314

Re: Выборка like или regexp

Подскажите пожалуйста. Почему

select distinct substring_index(metka,':',1) as metka from table


выводит только уникальные записи для поля metka, с учетом того, что значение урезано с помощью substring_index

а

select distinct substring_index(metka,':',1) as metka, id from table


все записи.

И как правильно сделать, чтобы вернуть только урезанные с помощью substring_index.

group by также создаст записей больше положенного

так как

один
один:два
один:два:три

должные вернуть только одну запись, а с group by вернет три разных записи.

Отредактированно platedz (27.09.2015 18:11:05)


Wazzup.su - это сервис объединивший в себе все в одном.

Неактивен

 

#11 27.09.2015 18:22:18

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

Re: Выборка like или regexp

потому что distinct действует на все поля, который в select выбираются.
Насчет того, как правильно сделать - тут Вам виднее. Но если смотреть на изначальную постановку задачи - зачем Вам вообще id?

Или давайте по простому - скиньте show create table t и insert into t ( а лучше создайте  на sqlfiddle )
и приведите результат, который хотите получить.


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#12 27.09.2015 18:24:40

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

Re: Выборка like или regexp

>select distinct substring_index(metka,':',1) as metka, id from table
а где же использование функции locate? которая вообще-то ищет нужный Вам разделитель. и результат передаете в substring_index.


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#13 27.09.2015 18:40:52

platedz
Старожил
Зарегистрирован: 27.03.2012
Сообщений: 314

Re: Выборка like или regexp

Так я и без locate, получаю необходимую запись. Зачем мне он? substring_index в любом случае возвращает необходимую запись, ее же не обязательно урезать

Мне надо так, только чтобы id тоже был

http://sqlfiddle.com/#!9/657c7/4/0

А я получаю так

http://sqlfiddle.com/#!9/657c7/5/0


Wazzup.su - это сервис объединивший в себе все в одном.

Неактивен

 

#14 27.09.2015 20:24:55

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Выборка like или regexp

platedz написал:

Мне надо так, только чтобы id тоже был

http://sqlfiddle.com/#!9/657c7/4/0

substring_index(metka,':',1) одинаковый у нескольких строк, а id у этих строк разный. Какой id должен быть в ответе?

Неактивен

 

#15 27.09.2015 23:11:07

platedz
Старожил
Зарегистрирован: 27.03.2012
Сообщений: 314

Re: Выборка like или regexp

там не только id. Так что желательно, чтобы можно было отсортировать, получив я думаю, последний в первую очередь задав какое-либо поле конкретное. В целом чтобы можно было отсортировать по убыванию по возрастанию.


Wazzup.su - это сервис объединивший в себе все в одном.

Неактивен

 

#16 28.09.2015 00:22:47

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Выборка like или regexp

Сортировка идет уже после группировки.
Вначале вам нужно указать какие строки должны быть выбраны из каждой группы, см Группировка в MySQL

Неактивен

 

#17 28.09.2015 00:29:32

platedz
Старожил
Зарегистрирован: 27.03.2012
Сообщений: 314

Re: Выборка like или regexp

Ну сортировка дело второстепенно. Вы мне лучше скажите, как мне получить уникальные значения только одного поля до разделителя.

Чтобы у мне при запросе substring_index(metka,':',1) было на выводе не три раза "один" как здесь http://sqlfiddle.com/#!9/657c7/5/0

А чтобы я получил уникальное значения как тут http://sqlfiddle.com/#!9/657c7/4/0. Но чтобы я мог также и другие поля указать в запросе.


Wazzup.su - это сервис объединивший в себе все в одном.

Неактивен

 

#18 28.09.2015 00:57:49

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Выборка like или regexp

select distinct substring_index(metka,':',1), id from `table`;

равнозначно
select substring_index(metka,':',1), id from `table` group by substring_index(metka,':',1), id;


т.е. вы просите не уникальные значения только одного поля, а уникальную комбинацию полей substring_index(metka,':',1) и id.

Если вы хотите получить уникальные значения только одного поля и ещё какие-то поля, то вам нужно явно указать принцип отбора этих дополнительных полей в группе. О чем и статья из прошлого ответа.

Неактивен

 

#19 28.09.2015 07:37:44

platedz
Старожил
Зарегистрирован: 27.03.2012
Сообщений: 314

Re: Выборка like или regexp

Что-то видимо непонял. Спасибо. На Вашем примере разобрался

Отредактированно platedz (28.09.2015 07:37:59)


Wazzup.su - это сервис объединивший в себе все в одном.

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson