Как мне сделать хороший поиск SQL? - PullRequest
0 голосов
/ 05 февраля 2011

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

Вот сценарий: моя группа называется «Liten gruppe!», А строка поиска - «liten». И строка поиска, и строка результата переключаются в нижний регистр для поиска без учета регистра.

Что-то в синтаксисе должно делать то, чего я не ожидаю.

SELECT `id`
FROM gallery_groups
WHERE   `name` LIKE LOWER('%$searchstring%') OR
        `date_created` LIKE LOWER('%$searchstring%');

Спасибо за любую помощь


РЕДАКТИРОВАТЬ: ОК, это была глупая ошибка. Но коррекция по-прежнему не дает результатов:

SELECT `id`
FROM gallery_groups
WHERE   LOWER(`name`) LIKE '%$searchstring%' OR
        LOWER(`date_created`) LIKE '%$searchstring%';

РЕДАКТИРОВАТЬ: Интересно! Копирование полученного запроса непосредственно в PhpMyAdmin приводит к совпадению. Однако это НЕ приводит к появлению каких-либо строк при вызове из PHP. Как это может быть?


РЕДАКТИРОВАТЬ: ОК, оказывается, что запрос действительно возвращает 1 результат. Я был одурачен выводом дампа результата:

object(mysqli_result)[3]
  public 'current_field' => null
  public 'field_count' => null
  public 'lengths' => null
  public 'num_rows' => null
  public 'type' => null

Если все поля в результате равны нулю, как я могу узнать, есть ли какие-либо результаты, кроме запуска fetch_object ()?

Ответы [ 3 ]

1 голос
/ 05 февраля 2011

Вы можете выполнять поиск без учета регистра в MYSQL без LOWER:

WHERE   `name` COLLATE UTF8_GENERAL_CI LIKE '%$searchstring%' OR
        `date_created` COLLATE UTF8_GENERAL_CI LIKE '%$searchstring%';

AS для отладки: попробуйте напечатать SQL-запросы по мере их передачи в базу данных, чтобы увидеть, действительно ли вы используетепредполагаемая строка поиска.

0 голосов
/ 05 февраля 2011

не уверен, поможет ли это вам выяснить, возвращает ли ваш запрос какие-либо строки. но вот как я это делаю:

$ strSQL = "SELECT id"; $ strSQL. = "FROM gallery_groups"; $ strSQL. = "WHERE LOWER (name) LIKE '% $ searchstring%' OR"; $ strSQL. = "LOWER (date_created) LIKE '% $ searchstring%'";

$ rec = mysql_query ($ strSQL, $ oConn);

if (mysql_num_rows ($ rec)> 0) { $ strName = mysql_result ($ rec, 0, "name"); $ strDateCreated = mysql_result ($ rec, 0, "date_created"); } * +1010 *

0 голосов
/ 05 февраля 2011

Я предполагаю, что вы используете msql_query для получения объекта результата, и в этом случае вы можете использовать mysql_num_rows для получения количества строк в результате.

http://php.net/manual/en/function.mysql-query.php

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...