Название: Не точный поиск в базе MySQL Отправлено: kadr от Октябрь 23, 2009, 21:21 Всем привет! Есть задание, организовать поиск в базе данных с последющим выводом результата!
Искал в нете и наткнулься на LIKE, пробую, ничего не получается, пробую тот же запрос через phpmyadmin, все работает, в чем дело, что я пишу не правильно: st = ui->find_l->text(); q.prepare("SELECT * FROM main WHERE name LIKE ':st%'"); q.bindValue(":st",st); q.exec(); while (q.next()) { ui->pole->insertRow(row); ui->pole->setItem(row,0, new QTableWidgetItem(q.value(1).toString())); ui->pole->setItem(row,1, new QTableWidgetItem(q.value(2).toString())); ui->pole->setItem(row,2, new QTableWidgetItem(q.value(4).toString())); //ui->pole->setItem(row,3, new QTableWidgetItem(q.value(4).toString())); ui->pole->setItem(row,4, new QTableWidgetItem(q.value(5).toString())); ui->pole->setItem(row,5, new QTableWidgetItem(q.value(7).toString())); } Цель: Допустим при вводе, например Прок, выводил все слова начинающиеся на Прок, при том регистр не должен учитываться! Название: Re: Не точный поиск в базе MySQL Отправлено: Пантер от Октябрь 24, 2009, 11:42 Так у тебя запрос ничего не возвращает или ошибку выдает? Попробуй после q.exec(); сделать qDebug(q.lastError().text().toLocal8Bit());
Название: Re: Не точный поиск в базе MySQL Отправлено: ildar от Октябрь 24, 2009, 14:36 Код: st = ui->find_l->text() + "%"; попробуй вот так Название: Re: Не точный поиск в базе MySQL Отправлено: kadr от Октябрь 24, 2009, 22:36 Так у тебя запрос ничего не возвращает или ошибку выдает? Попробуй после q.exec(); сделать qDebug(q.lastError().text().toLocal8Bit()); "No data supplied for parameters in prepared statement QMYSQL3: Unable to execute statement" Название: Re: Не точный поиск в базе MySQL Отправлено: kadr от Октябрь 24, 2009, 22:37 Код: st = ui->find_l->text() + "%"; попробуй вот так Название: Re: Не точный поиск в базе MySQL Отправлено: MoPDoBoPoT от Октябрь 24, 2009, 23:12 q.prepare("SELECT * FROM main WHERE name LIKE ':st%'"); q.bindValue(":st",st); "No data supplied for parameters in prepared statement QMYSQL3: Unable to execute statement" Правильно, связываемой переменной то нет. То что в запросе между апострафами интерпретируется как строка, поэтому твоего :st "не видно". Чтобы получить то, что ты хочешь, надо сцепить строчки. Например в Oracle операция конкатенации это || (две палки), как в мускуле - не знаю. То есть должно быть примерно так:Код
Название: Re: Не точный поиск в базе MySQL Отправлено: kadr от Октябрь 24, 2009, 23:37 q.prepare("SELECT * FROM main WHERE name LIKE ':st%'"); q.bindValue(":st",st); "No data supplied for parameters in prepared statement QMYSQL3: Unable to execute statement" Правильно, связываемой переменной то нет. То что в запросе между апострафами интерпретируется как строка, поэтому твоего :st "не видно". Чтобы получить то, что ты хочешь, надо сцепить строчки. Например в Oracle операция конкатенации это || (две палки), как в мускуле - не знаю. То есть должно быть примерно так:Код
q.prepare("SELECT * FROM main WHERE name LIKE concat(:st,'%')"); q.bindValue(":st", st); q.exec(); :) Название: Re: Не точный поиск в базе MySQL Отправлено: kadr от Октябрь 25, 2009, 23:14 Поиском по одной таблице теперь все понятно, а вот в двух и более табицах этот поиск не работает, в чем проблема, как заставить искать в 2 табличках:
q.prepare("SELECT name,ostatok,base_chena,postavchik FROM main,uralbiofarm WHERE name LIKE concat(:st,'%')"); q.bindValue(":st",ui->find_l->text()); q.exec(); поля name,ostatok,base_chena,postavchik присутствуют в обеех таблицах, притом поиск по каждой таблице в отдельности проходит нормально! Есто вот такой вариант, нашел в нете: SELECT name,ostatok,base_chena,postavchik FROM main WHERE name LIKE concat(:st,'%') UNION ALL SELECT name,ostatok,base_chena,postavchik FROM uralbiofarm WHERE name LIKE concat(:st,'%') но он ищет только по аоследнему запросу, хота в phpmyadmin поис проходит нормально по двум запросам. Название: Re: Не точный поиск в базе MySQL Отправлено: Пантер от Октябрь 26, 2009, 07:06 ;D Сталкивался я с таким. Нужно делать так:
Код А с точки зрения sql лучше так: Код
Название: Re: Не точный поиск в базе MySQL Отправлено: kadr от Октябрь 26, 2009, 10:14 Хорошо,дома попробую!
:) Название: Re: Не точный поиск в базе MySQL Отправлено: Aleksey_Zh от Октябрь 28, 2009, 10:00 Кстати, kadr, Вам уже предлогали использовать QString.arg для формирования запроса! Там таких заморочек как
Цитировать :st || '%' нет!..Название: Re: Не точный поиск в базе MySQL Отправлено: Пантер от Октябрь 28, 2009, 12:29 QString.arg не очень хороший подход к формированию запроса.
|