SQL запрос нескольких полей из одной формы ввода - PullRequest
1 голос
/ 05 апреля 2011

Я использую php / mysql и jquery ui для автоматического заполнения. Мне нужна помощь в запросе двух полей из базы данных (город, штат) с одного входа (чикаго, ил). Меня бросает то, как комбинировать поля в запросе.

Пример, который работает

SELECT City, State, MIN(Zip) AS Min_ZIP, MAX(Zip) AS Max_ZIP
FROM Zips
WHERE City = $foo // 'chicago'
OR Zip = $foo // '01234'
GROUP BY City, State
ORDER BY State;

Что бы я хотел сделать, но не работает

SELECT City, State, MIN(Zip) AS Min_ZIP, MAX(Zip) AS Max_ZIP
FROM Zips
WHERE City = $foo // 'chicago'
OR
City+', '+State = $foo // 'chicago, il'
OR Zip = $foo // '01234'
GROUP BY City, State
ORDER BY State;

(Кстати - поле состояния является аббревиатурой.)

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

Ответы [ 5 ]

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

Я попытался CONCAT_WS на моей базе данных, и все прошло нормально, следующий запрос должен работать для вас.

Синтаксис для CONCAT_WS: здесь : первый аргумент - это разделитель, используемый для объединения строк, которые являются другими аргументами

SELECT City, State, MIN(Zip) AS Min_ZIP, MAX(Zip) AS Max_ZIP
FROM Zips
WHERE City = $foo // 'chicago'
OR
CONCAT_WS(', ',City, State) = $foo // 'chicago, il'
OR Zip = $foo // '01234'
GROUP BY City, State
ORDER BY State;
0 голосов
/ 05 апреля 2011
SELECT City, State, MIN(Zip) AS Min_ZIP, MAX(Zip) AS Max_ZIP
FROM
   (SELECT City, State, Zip, (City +', ' + State) AS CityState
    FROM Zips) as SQ
WHERE City = $foo // 'chicago'
OR
CityState = $foo // 'chicago, il'
OR Zip = $foo // '01234'
GROUP BY City, State
ORDER BY State;
0 голосов
/ 05 апреля 2011

вы можете попробовать


SELECT City, State, MIN(Zip) AS Min_ZIP, MAX(Zip) AS Max_ZIP
FROM Zips
WHERE City = 'chicago'
OR( City LIKE "chicago,%" AND State LIKE '%illinois')

OR Zip = '01234'
GROUP BY City, State
ORDER BY State;

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

Я бы предложил заключить вашу строку в скобки. Вы также можете использовать такую ​​функцию, как CONCAT () или CONCAT_WS () в MySQL.

А что вы подразумеваете под "это не работает"? Пункт нарушается или ...?

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

Разделите вашу входную строку перед выполнением запроса, чтобы вы могли сделать:

SELECT City, State, MIN(Zip) AS Min_ZIP, MAX(Zip) AS Max_ZIP
FROM Zips
WHERE City = 'chicago'
OR Zip = '01234'
GROUP BY City, State
ORDER BY State;

Состояние становится неактуальным, если они также указали Чикаго.

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