我有以下示例表和属性:
---------------------------
| Name | Town |
---------------------------
| Name 1 | POOLE |
| Name 2 | POOLE/WALLASEY |
| Name 3 | POOLE/WALLASEY |
| Name 4 | POOLE |
---------------------------
Run Code Online (Sandbox Code Playgroud)
我在PHP中使用以下SQL语句来检索行:
SELECT * FROM `table` WHERE `Town` LIKE '%".$global->getPlayerTown()."%'
Run Code Online (Sandbox Code Playgroud)
根据POOLE数据库返回的标准:
---------------------------
| Name | Town |
---------------------------
| Name 1 | POOLE |
| Name 2 | POOLE/WALLASEY |
| Name 3 | POOLE/WALLASEY |
| Name 4 | POOLE |
---------------------------
Run Code Online (Sandbox Code Playgroud)
但是,在使用条件时POOLE/WALLASEY,查询将返回:
---------------------------
| Name | Town |
---------------------------
| Name 2 | POOLE/WALLASEY |
| Name 3 | POOLE/WALLASEY |
---------------------------
Run Code Online (Sandbox Code Playgroud)
如何智能地告诉PHP将字符串拆分为一个查询中的单独条件(即POOLE和WALLASEY),以便查询检索所有行?
小智 3
SELECT * FROM `table` WHERE `town` REGEXP 'POOLE|WALLASEY';
Run Code Online (Sandbox Code Playgroud)
这将匹配具有一个或多个 POOLE 或 WALLASEY 实例的任何行。
至于 PHP 方面,根据数据集中有多少种分隔符(在本例中为“/”),它可能很快就会变得相当混乱。但将“/”替换为“|” 在 getPlayerTown() 中似乎是一种方法。
至于性能,我不确定 REGEXP 与 LIKE 相比如何。
https://dev.mysql.com/doc/refman/5.7/en/regexp.html