innovate
5.04.2013 - 23:04
Тип - varchar. Записи вида:
- 55.05.02
- 55.01
- 68.01.02
- 55.28.55.23
- 68.02.01
- 55.01.05
- 68.05
- 55.01.13.22.08
Как можно выбрать все записи
начинающиеся с 55 и
имеющие 2-е точки одним SQL запросом?
Результат запроса:
Игорь_Vasinsky
5.04.2013 - 23:06
у SQL тоже есть REGEXP
http://www.fpublisher.ru/documentation/mysql_doc/regexp.docs
_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
innovate
7.04.2013 - 00:27
Я так и не могу понять, как добавить условие на кол-во точек. С началом строки я разобрался:
$result = $mysqli->query("SELECT `id`,`hierar` FROM `table` WHERE `hierar` REGEXP '^55' ORDER BY `hierar`");
Я погуглил, вроде есть regexp_count, но что-то адекватных примеров/описания не нашел.
S.Chushkin
7.04.2013 - 08:54
Цитата (innovate @ 7.04.2013 - 00:27) |
Я так и не могу понять, как добавить условие на кол-во точек. |
Попробуйте так:
... where field not rlike '[^\\.]*\\.[^\\.]*\\.[^\\.]*\\.' and field rlike '^55\\.[^\\.]*\\.'
_____________
Рекламка / ad.pesow.com Хрень / mr-1.ru
innovate
7.04.2013 - 10:27
не работает, выдает что попало.
Более адекватно работает так:
Цитата |
SELECT field not rlike '^55\\.[^\\.]*\\.[^\\.]*\\.' and field rlike '[^\\.]*\\.[^\\.]*\\.' |
Но также выбирает и те записи, где кол-во точек больше двух.
innovate, объясните что это за данные
55.28.55.23, и зачем надо находить две точки.
_____________
Стимулятор ~yoomoney - 41001303250491
innovate
7.04.2013 - 10:35
Да как всегда, изобретение велосипеда
Это своего рода реализация практически бесконечного уровня вложенности, без рекурсии (за level отвечает одно поле), минимальное количество полей, таблиц.
Отсортированный иерархический список вытаскивается добавлением ORDER BY.
S.Chushkin
7.04.2013 - 10:59
Цитата (innovate @ 7.04.2013 - 10:27) |
не работает, выдает что попало.
|
А мозги включить религия не позволяет, чтобы поправить?
п.с. Поправил выборку, всё работает.
_____________
Рекламка / ad.pesow.com Хрень / mr-1.ru
innovate
7.04.2013 - 12:57
Цитата |
А мозги включить религия не позволяет, чтобы поправить? |
Вам видать точно не позволяет, простая логика: если бы знал, то не спрашивал.
Совпадений не найдено (очередная ошибка в логике).
Valick, почитаю.
S.Chushkin
7.04.2013 - 15:10
Цитата (innovate @ 7.04.2013 - 12:57) |
Вам видать точно не позволяет, простая логика: если бы знал, то не спрашивал. |
А, ну да, я забыл, что учить матчасть не обязательно - "спроси и добрый дядя за тебя всё сделает"
Мой Вам совет - учите матчасть, в т.ч. регулярки. Не всегда за Вас будут делать, иногда придётся и самому.
Цитата |
Совпадений не найдено (очередная ошибка в логике). |
У Вас? Вполне может быть, - ищите.
У меня всё работает. Result:
55.05.02
55.01.05
_____________
Рекламка / ad.pesow.com Хрень / mr-1.ru
Игорь_Vasinsky
7.04.2013 - 15:13
регулярки только на практике понять можно.
_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
innovate
7.04.2013 - 17:53
Цитата |
У меня всё работает |
Покажите запрос полностью.
Цитата |
А, ну да, я забыл, что учить матчасть не обязательно - "спроси и добрый дядя за тебя всё сделает" |
Добрый дядя предполагает, и его предположение вернет false :)
Зачастую одной матчасти недостаточно, да и искал я немного в другом русле. Было что-то в роде:
SELECT * FROM `table` WHERE `field` REGEXP_COUNT('.') = 2 and `field` REGEXP '^55');
Само собой это неправильно, но такой вариант был бы удобнее, т.к. кол-во точек все время будет меняться, в вашем примере придется собирать строку, а тут просто изменить число.
S.Chushkin
7.04.2013 - 18:43
Цитата (innovate @ 7.04.2013 - 17:53) |
Покажите запрос полностью.
|
Нда... :(
SELECT * from table where field not rlike '[^\\.]*\\.[^\\.]*\\.[^\\.]*\\.' and field rlike '^55\\.[^\\.]*\\.'
_____________
Рекламка / ad.pesow.com Хрень / mr-1.ru
S.Chushkin
7.04.2013 - 18:46
Цитата (innovate @ 7.04.2013 - 17:53) |
Само собой это неправильно, но такой вариант был бы удобнее, т.к. кол-во точек все время будет меняться, в вашем примере придется собирать строку, а тут просто изменить число. |
Хотелок много, а реальность одна. Хочешь не хочешь, а выше возможностей конкретного движка не прыгнешь.
_____________
Рекламка / ad.pesow.com Хрень / mr-1.ru