我们如何识别搜索字符串中的逗号并相应地在MySQL中激活查询?

时间:2014-10-31 06:14:59

标签: php android mysql sql

我正在制作一个小型城市指南应用程序,其中我在数据库中有两个表:

country(country_code(pk),country_name)

city(city_id(pk), city_name, city_details, country_code(fk))

现在,如果用户搜索特定city_namecountry_name,我可以使用LIKE运算符:

SELECT city_name,city_details,country_name FROM table city INNER JOIN country ON city.contry_code = country.country_code WHERE city_name LIKE "search_string";

但是,如果用户搜索逗号分隔值,例如搜索'Ahmedabad,India'而不是'Ahmedabad',该怎么办?然后该怎么办?请帮助。我正在使用PHP和MySQL。

4 个答案:

答案 0 :(得分:4)

@xyz我认为你可以使用正则表达式在MYSQL中做到这一点。

SELECT * FROM city INNER JOIN country ON
city.contry_code = country.country_code
WHERE CONCAT(city.city_name,", ", country.country_name) REGEXP  '^your search string'

这里“^”将匹配字符串的开头。有关MYSQL中正则表达式的更多信息,请参阅此link

答案 1 :(得分:2)

如果你提供数据是唯一的{state,Country}案例,你可以在运行查询之前使用explode或其他php函数拆分字符串,并且可以添加过滤器,例如state = {ahemdabad}&& country = {India}。 这取决于您的要求,您也可以使用||而不是&&。

答案 2 :(得分:0)

使用split(",")课程中的String。之后,您只需要使用SQLite查询搜索结果。

示例:

String[] results = etSearch.getText().toString().split(",");

for(int i = 0; i < results.length; i++)
   myDatabaseInstance.search(results[i]);

答案 3 :(得分:0)

@ keshav-jha的解决方案非常简单明了。它连接城市和国家名称,并将其与正则表达式进行匹配。仅适用于以下任一特定输入格式:Ahmadabad,India(逗号后无空格)或Ahmadabad, India(逗号后面的空格)。因此,如果搜索查询必须处理此空间问题,我们可以在此处取消REGEXP,并将简单like语句与REPLACE结合使用:

解决方案1:

SELECT * FROM city INNER JOIN country ON
city.contry_code = country.country_code
WHERE CONCAT(city.city_name,",", country.country_name) like REPLACE(TRIM('your search string'),' ','');

您可以选择使用REGEXP而不是LIKE,但是您必须找到一种方法来删除REGEXP表达式本身内的字符串中的所有空格字符。因为MySql使用Henry Spencer的正则表达式实现符合POSIX 1003.2,它不允许free-spacing mode在正则表达式的开头使用?x,所以你需要找到另一个在REGEXP中强制执行自由间隔模式的方法或者,如果您出于任何原因选择使用REGEXP,则可以使用@ keshav-jha的原始代码添加逻辑表达式:

解决方案2:

SELECT * FROM city INNER JOIN country ON
city.contry_code = country.country_code
WHERE CONCAT(city.city_name,", ", country.country_name) REGEXP '^your search string' OR CONCAT(city.city_name,",", country.country_name) REGEXP '^your search string';