Mysql SQL搜索配置

Mysql SQL搜索配置,mysql,sql,Mysql,Sql,我不是很擅长SQL,我有一个简单的zipcode查找器,我为我的网站创建的。SQL语句如下所示: $query = "select * from zipcodes2 where ZipCode like \"%$trimmed%\" *\“%$TRIMED%*当然是用户输入的实际zipcode。它工作得很好,但现在我想让用户搜索城市或州,而不仅仅是zipcode,从而让它更先进。我已经创建了列,它们被命名为“城市”和“州”“。我到底应该在SQL行中输入什么?我是否需要更改代码的任何其他部分,

我不是很擅长SQL,我有一个简单的zipcode查找器,我为我的网站创建的。SQL语句如下所示:

$query = "select * from zipcodes2 where ZipCode like \"%$trimmed%\" 

*\“%$TRIMED%*当然是用户输入的实际zipcode。它工作得很好,但现在我想让用户搜索城市或州,而不仅仅是zipcode,从而让它更先进。我已经创建了列,它们被命名为“城市”和“州”“。我到底应该在SQL行中输入什么?我是否需要更改代码的任何其他部分,特别是\“%$TRIMED%\部分?

您可以尝试以下方法:

    select * 
    from zipcodes2 
    where 
    (
       ZipCode like '%$trimmed%'
       OR City like '%City%'
       OR State like '%State%'
    )

您应该能够通过将SQL查询修改为以下内容来完成:

从zipcodes2中选择*,其中ZipCode类似\“%$trimmed%\”或(State=\“$State\u variable\”和City=\“$City\u variable\”)

这当然取决于你的最终目标。如果你试图匹配明确的城市/州组合,上述方法是有效的


如果您希望人们能够找到美国所有名为“townsville”的地方的Zipcode,请删除括号并将and改为OR。

这不是一个很好的方法,但您可以通过以下方法接近您想要的:

$query = "select * from zipcodes2 where ZipCode like '%$trimmed%' or (CONCAT(City, ',', State) = '$trimmed')"
但是您必须确保用户的响应没有空格,因此它显示为
Chicago,IL
,而不是
Chicago,IL
Chicago,IL

您可以通过将此项放在查询之前来执行此操作:

$trimmed = preg_replace( '/\s+/', ' ', $trimmed );

我的最终目标是让用户能够通过zipcode或城市/州组合搜索列表。他们必须输入城市,州,如伊利诺伊州芝加哥。我该怎么做?在这种情况下,上面的SELECT语句应该这样做:为什么有\“$state\u vairable\”和\“$city\u variable”\" ? 我只有一个输入行供用户输入信息。它似乎不起作用。我在三个地方都尝试过同样的$trimmed。你有两个选择。1) 为city和state添加其他字段供人们填写,并将这些变量放入SQL语句中。2) 解析$trimmed变量的输入以确定它们是否提供了zipcode或city/state组合,如有必要,将$trimmed分解为$city和$state并插入SQL语句。如何确定它们是否输入了zipcode或city/state组合?如果不允许用户搜索部分zipcode,也就是说,您需要5个字符的输入,您可以使用相等运算符(=)而不是“like”。如果在搜索词的两侧使用like和%wildcard%,则必须扫描整个表。谢谢。我试过了,它成功了,但没有成功。当我尝试它时,不管查询是什么,它都会显示表中的第一行。这是可行的,但是在用户输入后,如何消除空白呢?我不想强迫用户永远不要放置空白。这是不可靠的。我应该补充一点,这就是我必须修剪查询的地方:$var=@$\u GET['q']$修剪=修剪($var);我回答的最后一行将去掉空格。只需在构建查询之前执行此操作。但是,如果您想要可靠性,您应该将其拆分为用户选择的多个字段。正如我所说,你可以用这种方式做你想做的事情,但这不是最好的设计。我确实把最后一行放在了查询字符串之前,但它似乎不起作用。