Russian Qt Forum
Май 09, 2024, 12:12 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Помогите написать regexp  (Прочитано 5121 раз)
skydion
Гость
« : Март 09, 2010, 13:38 »

Ребята нужно написать поиск слова в MySQL по определенной маске и заданой длины...

Думаю юзать regexp но нужных знаний не имею, читал немного по теме, но пока что тяжело самому сделать Непонимающий методом тыка не прошло...

пс. Кодировка UTF8, думаю с этим проблем не должно быть?
Записан
voronElf
Гость
« Ответ #1 : Март 09, 2010, 14:17 »

Поиск нужен в sql запросе или в модели ?

Цитировать
по определенной маске
так можт масками и пользоваться , они побыстрее регулярок ?
Записан
skydion
Гость
« Ответ #2 : Март 09, 2010, 14:23 »

А как? Можно пример? А то я только начал с этим разбираться...
Записан
alexman
Гость
« Ответ #3 : Март 09, 2010, 15:44 »

Поиск 'SQL LIKE' в инете!
Записан
skydion
Гость
« Ответ #4 : Март 09, 2010, 16:08 »

Ну я пробовал, но там почему-то чтобы найти 6-ти символьное слово нужно задать 7 раз "_".

QString tmp = createTemplate(curWord);
query.prepare("SELECT _id, _word FROM words WHERE lower(_word) LIKE \"?\";");
query.addBindValue(QVariant(tmp));

почему значение не биндится?
На выполнение идет запрос без подставки шаблона/маски?
« Последнее редактирование: Март 09, 2010, 16:52 от skydion » Записан
voronElf
Гость
« Ответ #5 : Март 10, 2010, 06:57 »

1. Т.е. все-таки sql
2. Значение не биндится или запрос не выполняется ?
3. я бы пробовал так:
Код:
QString tmp = createTemplate(curWord);
query.prepare("SELECT _id, _word FROM words WHERE lower(_word) LIKE ?");
query.addBindValue(tmp);

никогда не писал точку с запятой в конце запроса, при забиндивании кавычки сами проставляются насколько знаю
Записан
skydion
Гость
« Ответ #6 : Март 10, 2010, 16:52 »

1. Т.е. все-таки sql
Ну да я же писал что MySQL  Улыбающийся

2. Значение не биндится или запрос не выполняется ?

Код:
QString tmp = createTemplate(curWord);
query.prepare("SELECT _id, _word FROM words WHERE lower(_word) LIKE ?");
query.addBindValue(tmp);

никогда не писал точку с запятой в конце запроса, при забиндивании кавычки сами проставляются насколько знаю
Да спасибо так заработало, без кавычек... хотя я и одинарные пробовла тоже не шло...
Ну незнаю я всюду пишу точку с запятой ) привычка, вроде нигде не материлось Подмигивающий

Ну, пока что для тестирования и LIKE подойдет... глюки уже словил  Улыбающийся
Но всетаки на будущее нужно регексп, так как возможны условия для подбора слова...

Так что помогайте ) как задать длину слова для поиска средствами regexp встроеного в MySQL... ?

ps. кто в курсе какая версия sql реализована в драйвере БД Qt 4.6.2? вопрос почему задаю, я вот пользую БД 5.1.44,
все ли возможности даной версии я смогу использовать?
Записан
voronElf
Гость
« Ответ #7 : Март 11, 2010, 07:12 »

чтото в стиле "^.{6}$"

в общем документация MySql, про фигурные скобки смотри
Записан
skydion
Гость
« Ответ #8 : Март 11, 2010, 09:16 »

Да нет, я такое сам пробовал Строит глазки не работает.... возвращает почему-то трехсимвольные слова...

^.{6, 6}$ так тоже пробовал... выдает Error code 1139, SQL state 42000: Got error 'invalid repetition count(s)' from regexp
Записан
voronElf
Гость
« Ответ #9 : Март 11, 2010, 09:58 »

на первой попавшейся под руку таблице:
Код:
SELECT * FROM `jos_vm_2t_brand` where bname regexp '^.{6}$'
все отлично работает (не из qt запрос делал)

Со стороны MySql все норм, проверяй чтобы в mysq запрос приходил именно в таком виде. Мож как то в коде косячится ? Попробуй без забиндивания значений ручками запрос в строке сформировать, должен пройти
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.052 секунд. Запросов: 21.