使用 IN/LIKE、使用 TRIM 或 MySQL 中的 CONTAINS 在数据库中提取变量数据
Pulling Variable Data in Database with IN/LIKE, using TRIM, or CONTAINS in MySQL
所以我 运行 遇到的问题可能是以前有人问过的问题,但我还有一些补充问题要添加。我已经看到关于无法在 Where 子句中使用 IN 和 LIKE 的其他 Whosebug 问题。唯一的问题是我试图避免使用 LIKE 和 OR,因为在 PHP 中我将数据放入数组并使用 (','
) 内爆数据,所以我可以使用 IN
,在某些情况下,数据可能是 100 个条目,使用 LIKE
似乎并不安全,因为可能有多种组合。我的同事提到我可以使用 TRIM
,但我觉得这不能解决我的问题。话虽如此,让我提供一些见解。
我从用户名是 [UserName]
的目录中提取数据,这个用户名或在某些情况下,多个用户名被存储到一个数组中,然后循环 运行s 来获取房间号基于用户名。问题是这个包含房间号的 table(这是只读的,显然没有人知道谁有权进行更改)的用户名是 [ UserName]
。因为它,我永远不会得到那个数据,因为 [UserName]
和 [ UserName]
显然不一样。
我需要找到一种方法来编写更可靠的查询,基本上像这样查看每个用户名:%UserName%
或者在使用 WHERE/IN
子句(或类似的东西)时几乎否定数据库中的空格。
我不明白使用 TRIM
怎么会不起作用...
选项 1:
SELECT u.*, TRIM(u.username) as username_canonical
FROM user u
WHERE TRIM(u.username) = ?
选项 2:
SELECT u.*, TRIM(u.username) as username_canonical
FROM user u
HAVING username_canonical = ?
除了用户名标准之外,您仍然可以使用其中任何一个 IN
子句。
所以我 运行 遇到的问题可能是以前有人问过的问题,但我还有一些补充问题要添加。我已经看到关于无法在 Where 子句中使用 IN 和 LIKE 的其他 Whosebug 问题。唯一的问题是我试图避免使用 LIKE 和 OR,因为在 PHP 中我将数据放入数组并使用 (','
) 内爆数据,所以我可以使用 IN
,在某些情况下,数据可能是 100 个条目,使用 LIKE
似乎并不安全,因为可能有多种组合。我的同事提到我可以使用 TRIM
,但我觉得这不能解决我的问题。话虽如此,让我提供一些见解。
我从用户名是 [UserName]
的目录中提取数据,这个用户名或在某些情况下,多个用户名被存储到一个数组中,然后循环 运行s 来获取房间号基于用户名。问题是这个包含房间号的 table(这是只读的,显然没有人知道谁有权进行更改)的用户名是 [ UserName]
。因为它,我永远不会得到那个数据,因为 [UserName]
和 [ UserName]
显然不一样。
我需要找到一种方法来编写更可靠的查询,基本上像这样查看每个用户名:%UserName%
或者在使用 WHERE/IN
子句(或类似的东西)时几乎否定数据库中的空格。
我不明白使用 TRIM
怎么会不起作用...
选项 1:
SELECT u.*, TRIM(u.username) as username_canonical
FROM user u
WHERE TRIM(u.username) = ?
选项 2:
SELECT u.*, TRIM(u.username) as username_canonical
FROM user u
HAVING username_canonical = ?
除了用户名标准之外,您仍然可以使用其中任何一个 IN
子句。