在 MySQL 查询中,是否可以使 "o" 读为“0”,反之亦然?

In a MySQL query is there anyway to make "o" read as "0" and vice versa?

我不太确定如何正确解释这一点,但我会尽力而为。我正在使用 ajax 根据文本输入字段过滤某些帖子。然后列出所有帖子,包括用户输入的字母和数字。非常基本的东西。

现在,我的客户想要添加 "Smart Search" 功能。基本上,如果用户输入“0123”,他们希望它列出所有标题包含“0123”和 "o123" 的帖子。 "s" 和“5”需要发生同样的事情。因此,如果用户键入“1234s”,它将列出所有包含“1234s”和“12345”的帖子。有办法吗?

这是我目前的情况,numberchar 是文本输入的名称

$categoryparentfilter = "SELECT ID FROM `wp_posts` WHERE `post_title` LIKE '".trim($_POST['numberchar'])."%' order by ID desc";

您可以使用 MySQL 的 REPLACE 或 PHP 的 str_replace

您可以在查询本身中使用 MySQL 的 REPLACE function to replace characters

REPLACE('queryStringArgument', 'o', '0')

如果您希望在服务器上执行此操作,您也可以使用 PHP 的 str_replace

$numberchar = isset($_POST['numberchar']) ? $_POST['numberchar'] : ""; // Get the POSTed value if it's set.
$fixedNumberchar = str_replace("o", "0", $numberchar);
$categoryparentfilter = "SELECT ID FROM `wp_posts` WHERE `post_title` LIKE '". $fixedNumberchar ."%' order by ID desc";

备注

你这可能不是个好主意;您应该捕获无效参数并通知用户他做错了什么。但这由你决定。

您需要将其更改为:

$categoryparentfilter = "SELECT ID FROM `wp_posts` WHERE REPLACE(`post_title`,'[a-zA-z]+','') LIKE '%".trim(preg_replace("[^0-9]","", $_POST['numberchar']))."%' order by ID desc";

删除所有字符,只允许数字,在开头添加 % 广告将允许 o1234

str_replace()

// Replace "o" with "0"
$numberchar = str_replace("o", "0", trim($_POST['numberchar']));
$categoryparentfilter = "SELECT ID FROM `wp_posts` WHERE `post_title` LIKE '". $numberchar ."%' order by ID desc";