Php sql从单个表单输入查询多个字段

Php sql从单个表单输入查询多个字段,php,jquery,mysql,sql,Php,Jquery,Mysql,Sql,我正在使用php/mysql和jquery ui自动填充。我需要的帮助是从一个输入(伊利诺伊州芝加哥)查询db(城市、州)中的两个字段。让我头疼的是如何组合查询中的字段 有效的示例 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 St

我正在使用php/mysql和jquery ui自动填充。我需要的帮助是从一个输入(伊利诺伊州芝加哥)查询db(城市、州)中的两个字段。让我头疼的是如何组合查询中的字段

有效的示例

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个字母,包含在其他城市名称中,因此用户可能需要键入逗号和状态才能看到自动建议弹出窗口。

在运行查询之前拆分输入字符串,以便执行以下操作:

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;

如果还指定了chicago,则状态将变得不相关。

在运行查询之前拆分输入字符串,以便执行以下操作:

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;
如果他们还指定了芝加哥,则该州将变得无关紧要。

您可以试试


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;
你可以试试


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;

我建议将字符串连接用括号括起来。您还可以在MySQL中使用类似CONCAT()或CONCAT_WS()的函数


你说的“它不起作用”是什么意思?条款中断了还是

我建议将字符串连接用括号括起来。您还可以在MySQL中使用类似CONCAT()或CONCAT_WS()的函数


你说的“它不起作用”是什么意思?条款中断了还是

我在db上尝试了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;

我在db上尝试了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;

city state和zip是同一个变量字段,它们是通过键盘输入的,而不是同时输入的。所以“chica”会显示多个城市,这很好,然后当用户键入更多的“chicago”时,它会自动建议不同州的不同城市命名为“chicago”(是的,有一些),然后当用户定义更多的“chicago,i”时,它只会自动建议芝加哥,Iltthe city state和zip是同一个变量字段,它们是通过键盘输入的,而不是同时输入的。所以“chica”会显示多个城市,这很好,然后当用户键入更多的“chicago”时,它会自动建议不同州的不同城市命名为“chicago”(是的,有一些),然后当用户定义更多的“chicago,i”时,它只会自动建议芝加哥,但我不能将芝加哥和伊利诺伊分开。他们走到一起,在同一个领域(即芝加哥,伊利诺伊州)结合在一起,我认为这不是最好的方式继续下去。如果你不想搜索短于4个字符的州名,你可以放弃自动补全功能(实际上,如果是3-4个字符,自动补全功能不应该帮助用户,因为它对长单词很有用)。但我不能将芝加哥和伊利诺伊分开。他们走到一起,在同一个领域(即芝加哥,伊利诺伊州)结合在一起,我认为这不是最好的方式继续下去。如果你不想搜索少于4个字符的州名,你可以放弃自动补全功能(实际上,如果是3-4个字符,自动补全功能不应该帮助用户,因为它对长单词很有用)。请记住,对字段执行函数会降低查询速度,因为必须对表中的每一行执行该函数。我认为更好的答案是将$foo除以',然后删减空格。第一个术语现在是城市,第二个术语(如果有的话)是州。@Evil我会记住这一点,如果需要拆分它们,我会使用php split。列表($city,$state)=拆分(',',$_GET['term']);请记住,对字段执行函数会降低查询速度,因为必须对表中的每一行执行该函数。我认为更好的答案是将$foo除以',然后删减空格。第一个术语现在是城市,第二个术语(如果有的话)是州。@Evil我会记住这一点,如果需要拆分它们,我会使用php split。列表($city,$state)=拆分(',',$_GET['term']);