【问题标题】:MySQL Return Results Similar to String Input but Without PeriodsMySQL 返回结果类似于字符串输入但没有句点
【发布时间】:2013-03-19 23:58:15
【问题描述】:

我在数据库中名为“St. Catharines”的区域列下有一些东西

我想从没有句点的字符串中返回包含“St. Catharines”的记录。因此,字符串将是“St Catharines”。这可以做到吗?怎么样?

现在我有:

$region = "St Catharines"; 
$query = " AND region like '" . $region . "%'";

不幸的是,它不起作用。

$region 字符串中始终不存在句点,并且可以在数据库记录中的任何位置(即不只是在“St”之后)。

【问题讨论】:

  • 只是您想要解决的时期,还是您的需要更复杂(例如消除所有标点符号)?
  • 保存一个规范化的版本 [i.e.去掉你不喜欢的字符]表中的区域,然后搜索它。
  • @MichaelBerkowski 是的,只是句号。
  • @landland 然后在 bestprogrammerintheworld 的答案下方查看我的评论。它会很慢,但会完成这项工作。
  • @MichaelBerkowski 感谢迈克尔,但经过一番思考,我决定按照 moonwave99 的建议行事

标签: php mysql sql


【解决方案1】:

我不确定我是否完全关注你,但类似的方法可能有效:

$region = "St. Catharines"; 
$query = " AND region like REPLACE($region, '.', '')" 

无论如何,我认为您应该使用 MySQL 内置函数(字符串操作)来实现这一点。 http://dev.mysql.com/doc/refman/5.0/en/string-functions.html

【讨论】:

  • 实际上相反 - REPLACE(region, '.', '') LIKE '$region%' 变量没有有句点。
  • @bestprogrammerintheworld $region 字符串中永远不会有句点。
【解决方案2】:

你真的不应该那样做,不好,应该提前解决。

您可以用空格分割字符串(使用explode),并搜索例如两个部分:
喜欢一个:$arr = explode(" ",$string);

$query = " AND (region LIKE '".$arr[0]."%' OR '%".$arr[1]."%')";

结果会发现所有开头带有“St”的内容以及结果中包含“Catharines”的所有内容。

这是该问题的最佳解决方案,是部分匹配,虽然它可能会显示比您想要的结果更多的结果,但另一种解决方案就像这里提到的那样:stackoverflow question about removing commas and etc

【讨论】:

  • 嗯好的,也许我需要重新考虑一下。没想到用sql会这么棘手
猜你喜欢
  • 2022-11-30
  • 1970-01-01
  • 2014-12-24
  • 2016-07-12
  • 2021-08-13
  • 1970-01-01
  • 2021-12-16
  • 2015-01-05
  • 1970-01-01
相关资源
最近更新 更多