Я работаю в рамках программного обеспечения 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'