【问题标题】:sql query multiple fields from a single form inputsql 从单个表单输入中查询多个字段
【发布时间】:2011-04-05 15:27:04
【问题描述】:

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

【问题讨论】:

    标签: php jquery mysql sql


    【解决方案1】:

    我在我的数据库上尝试了 CONCAT_WS,结果很好,下面的查询应该适合你。

    CONCAT_WS 的语法是here:第一个参数是用于连接字符串的分隔符,是其他参数

    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;
    

    【讨论】:

    • 请记住,对字段执行函数会减慢查询速度,因为必须对表中的每一行执行该函数。我认为更好的答案是将 $foo 拆分为“,”,然后修剪空格。第一个任期现在是城市,第二个任期(如果有的话)是州。
    • @Evil 我会记住这一点,如果需要拆分它们,请使用 php split。 list($city, $state) = split(', ', $_GET['term']);
    【解决方案2】:

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

    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;
    

    如果他们还指定了芝加哥,该州就变得无关紧要了。

    【讨论】:

    • 城市状态和zip是传入的同一个变量字段
    • 他们不是一下子就敲击键盘进来的。所以“chica”会显示多个城市,这很好,然后当用户键入更多“chicago”时,它会自动建议名为“chicago”的不同州的不同城市(是的,有一些),然后按照用户定义更“芝加哥,我”它只会自动建议芝加哥,我
    【解决方案3】:

    你可以试试

    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;

    【讨论】:

    • 但我无法区分芝加哥和伊利诺伊。他们一起出现在同一个领域(即芝加哥、伊利诺伊州)
    • 好吧,我认为这不是最好的方式。如果您不想搜索少于 4 个字符的州名,您实际上可以放弃自动补全(实际上,如果它是 3-4 个字符,用户不应该通过自动补全来帮助它,因为它对长词很有用)。跨度>
    【解决方案4】:

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

    “它不起作用”是什么意思?子句中断或...?

    【讨论】:

      【解决方案5】:
      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;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2022-10-04
        • 1970-01-01
        • 2014-02-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多