【发布时间】:2015-05-28 18:05:18
【问题描述】:
我有以下示例表和属性:
---------------------------
| Name | Town |
---------------------------
| Name 1 | POOLE |
| Name 2 | POOLE/WALLASEY |
| Name 3 | POOLE/WALLASEY |
| Name 4 | POOLE |
---------------------------
我在 PHP 中使用以下 SQL 语句来检索行:
SELECT * FROM `table` WHERE `Town` LIKE '%".$global->getPlayerTown()."%'
给定条件POOLE,数据库返回:
---------------------------
| Name | Town |
---------------------------
| Name 1 | POOLE |
| Name 2 | POOLE/WALLASEY |
| Name 3 | POOLE/WALLASEY |
| Name 4 | POOLE |
---------------------------
但是,当使用条件 POOLE/WALLASEY 时,查询返回:
---------------------------
| Name | Town |
---------------------------
| Name 2 | POOLE/WALLASEY |
| Name 3 | POOLE/WALLASEY |
---------------------------
如何智能地告诉 PHP 在一个查询中将字符串拆分为单独的条件(即POOLE 和WALLASEY),以便查询检索所有行?
【问题讨论】:
-
在
/上分解城镇字符串,用分解的部分构建单独的like子句,构建新的 sql 字符串...或者只是规范化表中的数据 -
@MarcB 表没有完全标准化,我理解。但是,你能给我举一个爆炸查询的例子吗?
-
投票支持规范化。这样,您在搜索数据库时(显然)受到限制。
-
它会以
where foo like '%poole%' (and/or, depending on your needs) foo like '%wallasey%'结尾,例如搜索字符串中的每个城镇名称都有一个like子句。 -
唯一的问题是
POOLEVILLE和POOLE会匹配。呸。另外,如果用户输入的城镇实际上有多个由斜线分隔的名称(例如,使用国家/地区Netherlands/Holland)怎么办?这不太可能,但可能。另请参阅此问题:stackoverflow.com/questions/471914/…
标签: mysql