Помогите сформировать SQL-запрос

MySQL/PostgreSQL/SQLite/Oracle/M$SQL/....

Модератор: terminus

Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Аватара пользователя
kozak
сержант
Сообщения: 240
Зарегистрирован: 2007-07-20 15:22:54
Откуда: Запорізька Січ

Помогите сформировать SQL-запрос

Непрочитанное сообщение kozak » 2009-07-03 10:01:29

Привет всем кто вместо того чтобы плавиться на море под солнцем, впитывает излучение он монитора! :bad:

Вот мой трабл:

Есть таблица my_tab с колонкой my_col

Код: Выделить всё

+--my_col--------+
| AA.02.6.6.1      |
| AA.02.6.6.1.1    |
| AA.02.6.6.1.2    |
| AA.02.6.6.1.3    |
| AA.02.6.6.1.4    |
| AA.02.6.6.1.5    |
| AA.02.6.6.1.6    |
| AA.02.6.6.1.7    |
| AA.02.6.6.1.8    |
| AA.02.6.6.1.9    |
| AA.02.6.6.1.10   | - здесь начинаются проблемы с [[:digit:]] (максимум число 9)
| AA.02.6.6.2      |
| AA.02.6.6.2.1    |
| AA.02.6.6.2.2    |
| AA.02.6.6.2.3    |
+----------------+
Как правильно сформулировать запрос чтобы выбрать последнюю запись из колонки my_col по маске AA.02.6.6.1.PATT

где PATT - последняя запись в таблице

т.е. чтоб при запросе по маске AA.02.6.6.1 вывело AA.02.6.6.1.10

Вот моя безрезультатная попытка:

Код: Выделить всё

$query = "SELECT my_col FROM my_db.my_tab
			WHERE my_col REGEXP '^AA.02.6.6.1.[[:digit:]]+$'
			ORDER BY my_col DESC LIMIT 1";
Выдает максимальное число PATT = "9"

:st:
Діла добрих оновляться, Діла злих згинуть. Т. Г. Шевченко.

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

Аватара пользователя
hizel
дядя поня
Сообщения: 9032
Зарегистрирован: 2007-06-29 10:05:02
Откуда: Выборг

Re: Помогите сформировать SQL-запрос

Непрочитанное сообщение hizel » 2009-07-03 11:14:06

для начала просто точка(.) рассматривается как любой символ, я бы ее забрейкил палочкой(\)
В дурацкие игры он не играет. Он просто жуткий, чу-чу, паровозик, и зовут его Блейн. Блейн --- это Боль.

Аватара пользователя
kozak
сержант
Сообщения: 240
Зарегистрирован: 2007-07-20 15:22:54
Откуда: Запорізька Січ

Re: Помогите сформировать SQL-запрос

Непрочитанное сообщение kozak » 2009-07-03 13:05:10

Нет. То же самое. Максимум выбирает AA.02.6.6.1.9...
Діла добрих оновляться, Діла злих згинуть. Т. Г. Шевченко.

Аватара пользователя
E-Wind
сержант
Сообщения: 155
Зарегистрирован: 2008-05-14 16:19:54
Откуда: Санкт-Петербург

Re: Помогите сформировать SQL-запрос

Непрочитанное сообщение E-Wind » 2009-07-03 15:02:27

Наманьячил ))

Код: Выделить всё

SELECT CONVERT(SUBSTRING_INDEX( SUBSTRING_INDEX(my_col,'.',6), '.', -1),UNSIGNED) as my_idx, id, my_col FROM `tbl` WHERE (my_col LIKE 'AA.02.6.6.1.%') order by my_idx desc LIMIT 1
Результат

Код: Выделить всё

my_idx	id	my_col  
10		11	AA.02.6.6.1.10 
А теперь давайте упрощать )

Пока работаем со строкой - 9 > 10 )) от этого отталкиваемся...

"Дамп":

Код: Выделить всё

id	my_col  
1	AA.02.6.6.1 
2	AA.02.6.6.1.1 
3	AA.02.6.6.1.2 
4	AA.02.6.6.1.3 
5	AA.02.6.6.1.4 
6	AA.02.6.6.1.5 
7	AA.02.6.6.1.6 
8	AA.02.6.6.1.7 
9	AA.02.6.6.1.8 
10	AA.02.6.6.1.9 
11	AA.02.6.6.1.10 
12	AA.02.6.6.2 
13	AA.02.6.6.2.1 
14	AA.02.6.6.2.2 
15	AA.02.6.6.2.3 

Аватара пользователя
kozak
сержант
Сообщения: 240
Зарегистрирован: 2007-07-20 15:22:54
Откуда: Запорізька Січ

Re: Помогите сформировать SQL-запрос

Непрочитанное сообщение kozak » 2009-07-03 16:54:03

cat THNX > E-Wind :smile:

Но теперь при маске AA.02.6.6.1 работает на ура, но при маске AA.02.6.6 не выдает AA.02.6.6.2 а выдает тот же результат, что и для AA.02.6.6.1 = AA.02.6.6.1.10 :(
Діла добрих оновляться, Діла злих згинуть. Т. Г. Шевченко.

Аватара пользователя
kozak
сержант
Сообщения: 240
Зарегистрирован: 2007-07-20 15:22:54
Откуда: Запорізька Січ

Re: Помогите сформировать SQL-запрос

Непрочитанное сообщение kozak » 2009-07-03 17:02:40

Оп-оп-оп!!!

Получилось. Выбирал не ту колонку...
Вот лапух... :fool:

Спасибо за помощь!!!
Діла добрих оновляться, Діла злих згинуть. Т. Г. Шевченко.

zg
полковник
Сообщения: 5845
Зарегистрирован: 2007-12-07 13:51:33
Откуда: Верх-Нейвинск

Re: Помогите сформировать SQL-запрос

Непрочитанное сообщение zg » 2009-07-03 20:14:12

E-Wind писал(а):Наманьячил ))
угу, я бы так сделал

Код: Выделить всё

mysql> select mask, replace(mask,'AA.02.6.6.1.','')+0 from test where mask LIKE "AA.02.6.6.1%";
+----------------+-----------------------------------+
| mask           | replace(mask,'AA.02.6.6.1.','')+0 |
+----------------+-----------------------------------+
| AA.02.6.6.1    |                                 0 |
| AA.02.6.6.1.1  |                                 1 |
| AA.02.6.6.1.2  |                                 2 |
| AA.02.6.6.1.3  |                                 3 |
| AA.02.6.6.1.4  |                                 4 |
| AA.02.6.6.1.5  |                                 5 |
| AA.02.6.6.1.6  |                                 6 |
| AA.02.6.6.1.7  |                                 7 |
| AA.02.6.6.1.8  |                                 8 |
| AA.02.6.6.1.9  |                                 9 |
| AA.02.6.6.1.10 |                                10 |
+----------------+-----------------------------------+
11 rows in set (0.00 sec)

mysql>
суть ясна? или пояснить :smile:

Аватара пользователя
kozak
сержант
Сообщения: 240
Зарегистрирован: 2007-07-20 15:22:54
Откуда: Запорізька Січ

Re: Помогите сформировать SQL-запрос

Непрочитанное сообщение kozak » 2009-07-05 13:31:25

Уже ясна. 5+ за оптимизацию. :smile:
Діла добрих оновляться, Діла злих згинуть. Т. Г. Шевченко.

Аватара пользователя
kozak
сержант
Сообщения: 240
Зарегистрирован: 2007-07-20 15:22:54
Откуда: Запорізька Січ

Функция GROUP_CONCAT

Непрочитанное сообщение kozak » 2011-04-05 21:27:38

Таблица все та-же...)

Код: Выделить всё

+--my_col----------+-my_name-
| AA.02.6.6.1      |   A
| AA.02.6.6.1.1    |   B
| AA.02.6.6.1.2    |   C
| AA.02.6.6.1.3    |   D
| AA.02.6.6.1.4    |   E
| AA.02.6.6.1.5    |   F
| AA.02.6.6.1.50   |   G
| AA.02.6.6.1.51   |   H
| AA.02.6.6.1.52   |   I
....
При выборке

Код: Выделить всё

SELECT GROUP_CONCAT(`my_name` ORDER BY `my_col` ASC SEPARATOR '+') FROM table WHERE 'AA.02.6.6.1.51' LIKE CONCAT(my_col,'%')
выдает не "H+A" а "H+F+A" т.к. строка "AA.02.6.6.1.5" тоже попадает под это условие.

Подскажите, как сгруппировать строки поочередно, групируя их по сумме "." (точек)?

Результатом, должна стать строка "H+A".

Спасибо!
Діла добрих оновляться, Діла злих згинуть. Т. Г. Шевченко.