Решено: Как сделать SQL запрос?
Модератор: Модераторы разделов
-
Assuri
- Сообщения: 678
- Статус: #include <brain.h>
- ОС: Fedora 12
Решено: Как сделать SQL запрос?
Есть какая-то строка "asd", а в БД находяться записи: " hi asd", "asdfg".
Как мне сделать SQL запрос, чтобы он возвращал те записи, где "asd" бы являлась подстрокой?
Как мне сделать SQL запрос, чтобы он возвращал те записи, где "asd" бы являлась подстрокой?
-
Uncle_Theodore
- Сообщения: 3339
- ОС: Slackware 12.2, ArchLinux 64
-
Assuri
- Сообщения: 678
- Статус: #include <brain.h>
- ОС: Fedora 12
Re: Решено: Как сделать SQL запрос?
Uncle_Theodore писал(а): ↑21.10.2007 08:18
SELECT * FROM <имя_таблицы> WHERE <имя_поля> LIKE "%asd%";
ПРЕмного благодарен!
Тему можно закрывать ;)
-
sergio
- Сообщения: 436
- Статус: Интересующийся новичок
- ОС: Debian GNU/Linux 4 & 5
Re: Решено: Как сделать SQL запрос?
select count(*) FROM runs WHERE info is null or info not like '%wrong%';
"процент" используется как маска...
Debian GNU/Linux 4 -- AMD Athlon64 3000+ / Asus 7600GS -- Gnome
Debian GNU/Linux 5 -- Dell (Vostro) 500 (Celeron M560 / iGM965) -- Gnome
Debian GNU/Linux 5 -- Dell (Vostro) 500 (Celeron M560 / iGM965) -- Gnome
-
Assuri
- Сообщения: 678
- Статус: #include <brain.h>
- ОС: Fedora 12
Re: Решено: Как сделать SQL запрос?
Оказывается проблема не решена до конца. Задача чуточку усложняется: нужно найти те строки, чтобы после подстроки были не любые симоволы, а пробел, амперстанд, подчеркивание или такая подстрока. Как организовать такой запрос?
-
serzh-z
- Бывший модератор
- Сообщения: 8259
- Статус: Маньяк
- ОС: Arch, Fedora, Ubuntu
Re: Решено: Как сделать SQL запрос?
-DooM-, like '%asdbf %'
-
Uncle_Theodore
- Сообщения: 3339
- ОС: Slackware 12.2, ArchLinux 64
Re: Решено: Как сделать SQL запрос?
SELECT * FROM <имя_таблицы> WHERE <имя_поля> REGEXP "asd|asd |asd&";
Ну и так далее...
-
Assuri
- Сообщения: 678
- Статус: #include <brain.h>
- ОС: Fedora 12
Re: Решено: Как сделать SQL запрос?
Не совсем понятно, где тут амперстанд? И откуда взялись "bf" ?
Uncle_Theodore писал(а): ↑21.10.2007 18:55SELECT * FROM <имя_таблицы> WHERE <имя_поля> REGEXP "asd|asd |asd&";
Ну и так далее...
Код: Выделить всё
query->exec(QString("SELECT * FROM %1 WHERE word REGEXP \"%2 |%2|%2&|%2%2\" ORDER BY word").arg(tableName).arg(str));Пишет, что не найдена функция REGEXP.
-
serzh-z
- Бывший модератор
- Сообщения: 8259
- Статус: Маньяк
- ОС: Arch, Fedora, Ubuntu
Re: Решено: Как сделать SQL запрос?
Это не является стандартом SQL. MySQL, вроде бы поддерживает, остальные - сомневаюсь.
Наример: where like '%<substr> %' or like '%<substr>_%' or like '%<substr>&%'
-
Assuri
- Сообщения: 678
- Статус: #include <brain.h>
- ОС: Fedora 12
Re: Решено: Как сделать SQL запрос?
Код: Выделить всё
query->exec(QString("SELECT * FROM %1 WHERE word LIKE \'%2 %\' OR LIKE \'%2&%\' OR LIKE \'%2_%\' ORDER BY word").arg(tableName).arg(str));Пишет, что синтаксическая ошибка.
Когда уберу LIKE после OR ошибок нет, но находит только первый вариант ( \'%2 %\' )
-
Uncle_Theodore
- Сообщения: 3339
- ОС: Slackware 12.2, ArchLinux 64
Re: Решено: Как сделать SQL запрос?
-DooM- писал(а): ↑21.10.2007 19:36Код: Выделить всё
query->exec(QString("SELECT * FROM %1 WHERE word LIKE \'%2 %\' OR LIKE \'%2&%\' OR LIKE \'%2_%\' ORDER BY word").arg(tableName).arg(str));
Пишет, что синтаксическая ошибка.
Когда уберу LIKE после OR ошибок нет, но находит только первый вариант ( \'%2 %\' )
Попробуй так
SELECT * FROM %1 WHERE word LIKE \'%2 %\' OR word LIKE \'%2&%\' OR word LIKE \'%2_%\' ORDER BY word;
-
serzh-z
- Бывший модератор
- Сообщения: 8259
- Статус: Маньяк
- ОС: Arch, Fedora, Ubuntu
Re: Решено: Как сделать SQL запрос?
Судя по всему в этом чудном QString проценты являются шаблоном, и нужные проценты, для LIKE, нужно просто экранировать.
-
Assuri
- Сообщения: 678
- Статус: #include <brain.h>
- ОС: Fedora 12
Re: Решено: Как сделать SQL запрос?
Uncle_Theodore писал(а): ↑21.10.2007 20:02Попробуй так
SELECT * FROM %1 WHERE word LIKE \'%2 %\' OR word LIKE \'%2&%\' OR word LIKE \'%2_%\' ORDER BY word;
Все получилось - спасибо
Судя по всему в этом чудном QString проценты являются шаблоном, и нужные проценты, для LIKE, нужно просто экранировать.
Если бы после процентов стояло число, то Вы правы.
-
halturin
- Сообщения: 167
- ОС: Linux
Re: Решено: Как сделать SQL запрос?
select ... from .... where... OR...OR..OR - за такое убивать надо
на массивной базе за такие запросы я обычно своим девелоперам отрываю руки по самые ноги 
-
Assuri
- Сообщения: 678
- Статус: #include <brain.h>
- ОС: Fedora 12
Re: Решено: Как сделать SQL запрос?
Почему ? О_о
-
halturin
- Сообщения: 167
- ОС: Linux
Re: Решено: Как сделать SQL запрос?
на больших объемах такими запросами можно базу поставить раком. логику запроса нужно менять в таких случаях... сначала делать большой срез, из него меньше, потом окончательный. Просто я насмотрелся уже таких запросов, которые на текущей работе горе-программисты накарябали до меня, ща вот все это говно приходится мне чистить. Я не спорю, если это будет "записная книжка" с несколькими десятками тысяч записей, еще куда ни шло... но на миллионниках, куда одновременно смотрят до 300 пользователей - это смерть базе.
-
Assuri
- Сообщения: 678
- Статус: #include <brain.h>
- ОС: Fedora 12
Re: Решено: Как сделать SQL запрос?
halturin писал(а): ↑05.11.2007 10:10на больших объемах такими запросами можно базу поставить раком. логику запроса нужно менять в таких случаях... сначала делать большой срез, из него меньше, потом окончательный. Просто я насмотрелся уже таких запросов, которые на текущей работе горе-программисты накарябали до меня, ща вот все это говно приходится мне чистить. Я не спорю, если это будет "записная книжка" с несколькими десятками тысяч записей, еще куда ни шло... но на миллионниках, куда одновременно смотрят до 300 пользователей - это смерть базе.
В таких случаях, конечно же, Вы правы.
-
halturin
- Сообщения: 167
- ОС: Linux
Re: Решено: Как сделать SQL запрос?
На самом деле никогда нельзя делать скидку из-за того, что база будет маленькой и нагрузки никакой. Если человек изначально старается сделать правильно и красиво, то потом уже и не замечаешь, под какие объемы пишешь, не приходится себя приучивать к обдумыванию кода "под тяжесть" ибо мысль уже по привычке сама в это русло уходит. Просто думать надо на шаг дальше, а не в лоб. Сори, просто действительно накипело на узколобые сиквелы в боевой базе.
-
Assuri
- Сообщения: 678
- Статус: #include <brain.h>
- ОС: Fedora 12
Re: Решено: Как сделать SQL запрос?
halturin писал(а): ↑06.11.2007 00:15На самом деле никогда нельзя делать скидку из-за того, что база будет маленькой и нагрузки никакой. Если человек изначально старается сделать правильно и красиво, то потом уже и не замечаешь, под какие объемы пишешь, не приходится себя приучивать к обдумыванию кода "под тяжесть" ибо мысль уже по привычке сама в это русло уходит. Просто думать надо на шаг дальше, а не в лоб. Сори, просто действительно накипело на узколобые сиквелы в боевой базе.
Да ничего - мне полезно это знать.
А как в моем случае можно избавится от кучи OR при этот оставит результат?