Решено: Как сделать SQL запрос?

Модератор: Модераторы разделов

Аватара пользователя
Assuri
Сообщения: 678
Статус: #include <brain.h>
ОС: Fedora 12

Решено: Как сделать SQL запрос?

Сообщение Assuri »

Есть какая-то строка "asd", а в БД находяться записи: " hi asd", "asdfg".
Как мне сделать SQL запрос, чтобы он возвращал те записи, где "asd" бы являлась подстрокой?
Спасибо сказали:
Аватара пользователя
Uncle_Theodore
Сообщения: 3339
ОС: Slackware 12.2, ArchLinux 64

Re: Решено: Как сделать SQL запрос?

Сообщение Uncle_Theodore »

-DooM- писал(а):
21.10.2007 07:45
Есть какая-то строка "asd", а в БД находяться записи: " hi asd", "asdfg".
Как мне сделать SQL запрос, чтобы он возвращал те записи, где "asd" бы являлась подстрокой?

SELECT * FROM <имя_таблицы> WHERE <имя_поля> LIKE "%asd%";
Спасибо сказали:
Аватара пользователя
Assuri
Сообщения: 678
Статус: #include <brain.h>
ОС: Fedora 12

Re: Решено: Как сделать SQL запрос?

Сообщение Assuri »

Uncle_Theodore писал(а):
21.10.2007 08:18
-DooM- писал(а):
21.10.2007 07:45
Есть какая-то строка "asd", а в БД находяться записи: " hi asd", "asdfg".
Как мне сделать SQL запрос, чтобы он возвращал те записи, где "asd" бы являлась подстрокой?

SELECT * FROM <имя_таблицы> WHERE <имя_поля> LIKE "%asd%";

ПРЕмного благодарен!

Тему можно закрывать ;)
Спасибо сказали:
sergio
Сообщения: 436
Статус: Интересующийся новичок
ОС: Debian GNU/Linux 4 & 5

Re: Решено: Как сделать SQL запрос?

Сообщение sergio »

-DooM- писал(а):
21.10.2007 07:45
Есть какая-то строка "asd", а в БД находяться записи: " hi asd", "asdfg".
Как мне сделать SQL запрос, чтобы он возвращал те записи, где "asd" бы являлась подстрокой?


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
Спасибо сказали:
Аватара пользователя
Assuri
Сообщения: 678
Статус: #include <brain.h>
ОС: Fedora 12

Re: Решено: Как сделать SQL запрос?

Сообщение Assuri »

Оказывается проблема не решена до конца. Задача чуточку усложняется: нужно найти те строки, чтобы после подстроки были не любые симоволы, а пробел, амперстанд, подчеркивание или такая подстрока. Как организовать такой запрос?
Спасибо сказали:
Аватара пользователя
serzh-z
Бывший модератор
Сообщения: 8259
Статус: Маньяк
ОС: Arch, Fedora, Ubuntu

Re: Решено: Как сделать SQL запрос?

Сообщение serzh-z »

-DooM-, like '%asdbf %'
Спасибо сказали:
Аватара пользователя
Uncle_Theodore
Сообщения: 3339
ОС: Slackware 12.2, ArchLinux 64

Re: Решено: Как сделать SQL запрос?

Сообщение Uncle_Theodore »

-DooM- писал(а):
21.10.2007 17:45
Оказывается проблема не решена до конца. Задача чуточку усложняется: нужно найти те строки, чтобы после подстроки были не любые симоволы, а пробел, амперстанд, подчеркивание или такая подстрока. Как организовать такой запрос?

SELECT * FROM <имя_таблицы> WHERE <имя_поля> REGEXP "asd|asd |asd&";
Ну и так далее...
Спасибо сказали:
Аватара пользователя
Assuri
Сообщения: 678
Статус: #include <brain.h>
ОС: Fedora 12

Re: Решено: Как сделать SQL запрос?

Сообщение Assuri »

serzh-z писал(а):
21.10.2007 17:47
-DooM-, like '%asdbf %'

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


Uncle_Theodore писал(а):
21.10.2007 18:55
SELECT * 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 запрос?

Сообщение serzh-z »

-DooM- писал(а):
21.10.2007 19:05
Пишет, что не найдена функция REGEXP.
Это не является стандартом SQL. MySQL, вроде бы поддерживает, остальные - сомневаюсь.

-DooM- писал(а):
21.10.2007 19:05
е совсем понятно, где тут амперстанд? И откуда взялись "bf" ?
Наример: where like '%<substr> %' or like '%<substr>_%' or like '%<substr>&%'
Спасибо сказали:
Аватара пользователя
Assuri
Сообщения: 678
Статус: #include <brain.h>
ОС: Fedora 12

Re: Решено: Как сделать SQL запрос?

Сообщение Assuri »

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

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 запрос?

Сообщение Uncle_Theodore »

-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 запрос?

Сообщение serzh-z »

Судя по всему в этом чудном QString проценты являются шаблоном, и нужные проценты, для LIKE, нужно просто экранировать.
Спасибо сказали:
Аватара пользователя
Assuri
Сообщения: 678
Статус: #include <brain.h>
ОС: Fedora 12

Re: Решено: Как сделать SQL запрос?

Сообщение Assuri »

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 запрос?

Сообщение halturin »

select ... from .... where... OR...OR..OR - за такое убивать надо :) на массивной базе за такие запросы я обычно своим девелоперам отрываю руки по самые ноги :)
Спасибо сказали:
Аватара пользователя
Assuri
Сообщения: 678
Статус: #include <brain.h>
ОС: Fedora 12

Re: Решено: Как сделать SQL запрос?

Сообщение Assuri »

halturin писал(а):
04.11.2007 23:40
select ... from .... where... OR...OR..OR - за такое убивать надо :) на массивной базе за такие запросы я обычно своим девелоперам отрываю руки по самые ноги :)

Почему ? О_о
Спасибо сказали:
Аватара пользователя
halturin
Сообщения: 167
ОС: Linux

Re: Решено: Как сделать SQL запрос?

Сообщение halturin »

-DooM- писал(а):
05.11.2007 07:43
halturin писал(а):
04.11.2007 23:40
select ... from .... where... OR...OR..OR - за такое убивать надо :) на массивной базе за такие запросы я обычно своим девелоперам отрываю руки по самые ноги :)

Почему ? О_о


на больших объемах такими запросами можно базу поставить раком. логику запроса нужно менять в таких случаях... сначала делать большой срез, из него меньше, потом окончательный. Просто я насмотрелся уже таких запросов, которые на текущей работе горе-программисты накарябали до меня, ща вот все это говно приходится мне чистить. Я не спорю, если это будет "записная книжка" с несколькими десятками тысяч записей, еще куда ни шло... но на миллионниках, куда одновременно смотрят до 300 пользователей - это смерть базе.
Спасибо сказали:
Аватара пользователя
Assuri
Сообщения: 678
Статус: #include <brain.h>
ОС: Fedora 12

Re: Решено: Как сделать SQL запрос?

Сообщение Assuri »

halturin писал(а):
05.11.2007 10:10
на больших объемах такими запросами можно базу поставить раком. логику запроса нужно менять в таких случаях... сначала делать большой срез, из него меньше, потом окончательный. Просто я насмотрелся уже таких запросов, которые на текущей работе горе-программисты накарябали до меня, ща вот все это говно приходится мне чистить. Я не спорю, если это будет "записная книжка" с несколькими десятками тысяч записей, еще куда ни шло... но на миллионниках, куда одновременно смотрят до 300 пользователей - это смерть базе.

В таких случаях, конечно же, Вы правы.
Спасибо сказали:
Аватара пользователя
halturin
Сообщения: 167
ОС: Linux

Re: Решено: Как сделать SQL запрос?

Сообщение halturin »

На самом деле никогда нельзя делать скидку из-за того, что база будет маленькой и нагрузки никакой. Если человек изначально старается сделать правильно и красиво, то потом уже и не замечаешь, под какие объемы пишешь, не приходится себя приучивать к обдумыванию кода "под тяжесть" ибо мысль уже по привычке сама в это русло уходит. Просто думать надо на шаг дальше, а не в лоб. Сори, просто действительно накипело на узколобые сиквелы в боевой базе.
Спасибо сказали:
Аватара пользователя
Assuri
Сообщения: 678
Статус: #include <brain.h>
ОС: Fedora 12

Re: Решено: Как сделать SQL запрос?

Сообщение Assuri »

halturin писал(а):
06.11.2007 00:15
На самом деле никогда нельзя делать скидку из-за того, что база будет маленькой и нагрузки никакой. Если человек изначально старается сделать правильно и красиво, то потом уже и не замечаешь, под какие объемы пишешь, не приходится себя приучивать к обдумыванию кода "под тяжесть" ибо мысль уже по привычке сама в это русло уходит. Просто думать надо на шаг дальше, а не в лоб. Сори, просто действительно накипело на узколобые сиквелы в боевой базе.

Да ничего - мне полезно это знать.

А как в моем случае можно избавится от кучи OR при этот оставит результат?
Спасибо сказали: