Отслеживание ошибки ajax в запросе sql - PullRequest
1 голос
/ 01 июля 2010

Я работаю в рамках программного обеспечения CMS, которое автоматически генерирует запрос для использования в поле ввода Google, например в поле ввода.

Предоставленные поля работают нормально, с запросом, который они используют, который использует внутреннее соединение.по двум таблицам.

Я пытаюсь создать запрос, который будет извлекать информацию только из одной таблицы и будет возвращать результаты по имени, фамилии или номеру паспорта.

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

В настоящий момент, если я ввожу 'r', он отображает результаты для гостей Роберт Уилсон и Рэй Бароне с паспортомчисло, имя и фамилия совпадают с правильными полями.

Если я ввожу 'wi', он возвращает результаты для Роберта Уилсона, но если я ввожу 'wil', он ничего не возвращает.

Кроме того, ввод только 'wi' приводит к отображению номера паспорта вместо фамилии.

Помимо того, что запрос работает не совсем верно, есть некоторые странные ошибки.Если я введу «%» или «b», то получу предупреждение JavaScript о синтаксической ошибке.

Использование «%» или «b» во включенном запросе работает нормально, ошибка определенно связана с моимзапрос, я просто не могу понять, что его вызывает.

Запрос автоматически генерируется из набора небольших запросов, хранящихся в таблице, которые я ранее разместил сегодня в SO.Если бы кто-нибудь мог указать мне, почему мой сгенерированный запрос имеет такие спорадические результаты, я был бы весьма признателен.

SELECT COUNT(IF(guests.passport               != '', CONCAT(guests.passport , IF
       (guests.lastname                                            != ''
OR     guests.lastname              != '', CONCAT(' (',IF(guests.lastname != '',
       guests.lastname, '{blank}'),', ',IF(guests.firstname        != '',
       guests.firstname, '{blank}'),')'), '')), IF(guests.lastname != ''
OR     guests.lastname                                             != '',
       CONCAT(IF(guests.lastname                                   != '',
       guests.lastname, '{blank}'),', ',IF(guests.passport         != '',
       guests.passport, '{blank}')), ''))) AS thecount
FROM   guests
WHERE  (
              guests.id!=0
       )
AND
       (
              (
                     guests.firstname LIKE 's%'
              OR     guests.lastname  LIKE 's%'
              OR     guests.passport  LIKE 's%'
              )
       OR
              (
                     (
                            guests.firstname LIKE 's%'
                     OR     guests.firstname LIKE '% s%'
                     OR     guests.lastname  LIKE 's%'
                     OR     guests.lastname  LIKE '% s%'
                     OR     guests.passport  LIKE 's%'
                     OR     guests.passport  LIKE '% s%'
                     )
              )
       )
SELECT DISTINCT IF(guests.passport             != '', CONCAT(guests.passport ,IF
                (guests.lastname                                           != ''
OR              guests.lastname     != '', CONCAT(' (',IF(guests.lastname != '',
                guests.lastname, '{blank}'),', ',IF(guests.firstname      != '',
                guests.firstname, '{blank}'),')'), '')), IF(guests.lastname !=
                ''
OR              guests.lastname          != '', CONCAT(IF(guests.lastname != '',
                guests.lastname, '{blank}'),', ',IF(guests.passport!= '',
                guests.passport, '{blank}')), '')) AS display  ,
                `guests`.`uuid`                    AS value    ,
                1                                  AS secondary,
                guests.id                          AS classname
FROM            guests
WHERE           (
                                guests.id!=0
                )
AND
                (
                                (
                                                guests.firstname LIKE 's%'
                                OR              guests.lastname  LIKE 's%'
                                OR              guests.passport  LIKE 's%'
                                )
                OR
                                (
                                                (
                                                                guests.firstname
                                                                LIKE 's%'
                                                OR
                                                                guests.firstname
                                                                LIKE '% s%'
                                                OR              guests.lastname
                                                                LIKE 's%'
                                                OR              guests.lastname
                                                                LIKE '% s%'
                                                OR              guests.passport
                                                                LIKE 's%'
                                                OR              guests.passport
                                                                LIKE '% s%'
                                                )
                                )
                )
ORDER BY        IF(guests.passport             != '', CONCAT(guests.passport ,IF
                (guests.lastname                                           != ''
OR              guests.lastname     != '', CONCAT(' (',IF(guests.lastname != '',
                guests.lastname, '{blank}'),', ',IF(guests.firstname      != '',
                guests.firstname, '{blank}'),')'), '')), IF(guests.lastname !=
                ''
OR              guests.lastname          != '', CONCAT(IF(guests.lastname != '',
                guests.lastname, '{blank}'),', ',IF(guests.passport!= '',
                guests.passport, '{blank}')), ''))
LIMIT           0, 8

Я надеюсь, что с форматированием все в порядке ... Я использовал инструмент форматирования, ноЯ не совсем уверен в стандартном способе форматирования SQL ....

Если это поможет, все это связано с модулем для phpBMS.

Вышеупомянутый запрос былрезультат ввода 's'

1 Ответ

0 голосов
/ 01 июля 2010

Я делаю что-то похожее на своем сайте, и я считаю, что использование REGEXP вместо LIKE предпочтительнее, потому что вам не нужно беспокоиться о символах% для начала и конца и т. Д.

AКак это сделать:

SELECT * FROM table WHERE value REGEXP 'searchval'

Последнее замечание по именам - не забудьте найти имя, фамилию и имя / фамилию.Я искал только первое и последнее независимо и не мог понять, почему полное имя приведет к 0 найденным записям.

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