[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: SELECT с условием (кол-во точек... )
innovate
Тип - 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 запросом? unsure.gif user posted image

Результат запроса:
  • 55.01.05
  • 55.05.02
Игорь_Vasinsky
у 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
Я так и не могу понять, как добавить условие на кол-во точек. С началом строки я разобрался:
$result = $mysqli->query("SELECT `id`,`hierar` FROM `table` WHERE `hierar` REGEXP '^55' ORDER BY `hierar`");

Я погуглил, вроде есть regexp_count, но что-то адекватных примеров/описания не нашел.
S.Chushkin
Цитата (innovate @ 7.04.2013 - 00:27)
Я так и не могу понять, как добавить условие на кол-во точек.

Попробуйте так:
... where field not rlike '[^\\.]*\\.[^\\.]*\\.[^\\.]*\\.' and field rlike '^55\\.[^\\.]*\\.'


_____________
Рекламка / ad.pesow.com Хрень / mr-1.ru
innovate
не работает, выдает что попало.

Более адекватно работает так:
Цитата
SELECT field not rlike '^55\\.[^\\.]*\\.[^\\.]*\\.' and field rlike '[^\\.]*\\.[^\\.]*\\.'

Но также выбирает и те записи, где кол-во точек больше двух.
Valick
innovate, объясните что это за данные 55.28.55.23, и зачем надо находить две точки.


_____________
Стимулятор ~yoomoney - 41001303250491
innovate
Да как всегда, изобретение велосипеда dry.gif
Это своего рода реализация практически бесконечного уровня вложенности, без рекурсии (за level отвечает одно поле), минимальное количество полей, таблиц.

Отсортированный иерархический список вытаскивается добавлением ORDER BY.
S.Chushkin
Цитата (innovate @ 7.04.2013 - 10:27)
не работает, выдает что попало.

А мозги включить религия не позволяет, чтобы поправить? wink.gif

п.с. Поправил выборку, всё работает.

_____________
Рекламка / ad.pesow.com Хрень / mr-1.ru
Valick
innovate, а как же nested set

_____________
Стимулятор ~yoomoney - 41001303250491
innovate
Цитата
А мозги включить религия не позволяет, чтобы поправить?

Вам видать точно не позволяет, простая логика: если бы знал, то не спрашивал. wink.gif

Совпадений не найдено (очередная ошибка в логике).

Valick, почитаю.
S.Chushkin
Цитата (innovate @ 7.04.2013 - 12:57)
Вам видать точно не позволяет, простая логика: если бы знал, то не спрашивал.  wink.gif

А, ну да, я забыл, что учить матчасть не обязательно - "спроси и добрый дядя за тебя всё сделает" wink.gif
Мой Вам совет - учите матчасть, в т.ч. регулярки. Не всегда за Вас будут делать, иногда придётся и самому.

Цитата
Совпадений не найдено (очередная ошибка в логике).

У Вас? Вполне может быть, - ищите.
У меня всё работает. Result:
55.05.02
55.01.05

_____________
Рекламка / ad.pesow.com Хрень / mr-1.ru
Игорь_Vasinsky
регулярки только на практике понять можно.

_____________
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
Цитата
У меня всё работает

Покажите запрос полностью.

Цитата
А, ну да, я забыл, что учить матчасть не обязательно - "спроси и добрый дядя за тебя всё сделает"


Добрый дядя предполагает, и его предположение вернет false :)
Зачастую одной матчасти недостаточно, да и искал я немного в другом русле. Было что-то в роде:
SELECT * FROM `table` WHERE `field` REGEXP_COUNT('.') = 2 and `field` REGEXP '^55');

Само собой это неправильно, но такой вариант был бы удобнее, т.к. кол-во точек все время будет меняться, в вашем примере придется собирать строку, а тут просто изменить число.
S.Chushkin
Цитата (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
Цитата (innovate @ 7.04.2013 - 17:53)
Само собой это неправильно, но такой вариант был бы удобнее, т.к. кол-во точек все время будет меняться, в вашем примере придется собирать строку, а тут просто изменить число.

Хотелок много, а реальность одна. Хочешь не хочешь, а выше возможностей конкретного движка не прыгнешь.

_____________
Рекламка / ad.pesow.com Хрень / mr-1.ru
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.