是否可以进行通配符搜索,并提取通配符的值并将它们放入MySQL结果中?最好,我还想标记通配符。继续阅读以了解我的意思。
例:考虑具有以下结构的数据库表。
+----+-------------------+
| id | content |
+========================+
| 1 | %1.%2.%3 |
+----+-------------------+
| 2 | Hey %name. |
+----+-------------------+
首先,请注意,这只是一个例子。我不是在单个数据库字段中存储多个值。请参阅此处:在数据库列中存储分隔列表真的那么糟糕吗?
相反,我想知道是否可以在数据库中使用通配符,然后将其与用户输入进行比较。换句话说,我想接受用户输入,例如2.bla.^7
或类似输入,然后返回相应的行 - %.%.%。然后我想获取这些通配符,并将它们作为 MySQL 结果的一部分返回。下面是一个基于我正在寻找的内容的 PHP mysql_fetch_assoc()
结果示例。结果显然不需要完全像这样布置,但这就是我正在寻找的结果。
例:
/************************
* Input: 2.bla.^7 *
************************/
Array
(
[0] => Array
(
[id] => 1,
[content] => %1.%2.%3
),
[1] => Array
(
[1] => 2,
[2] => bla,
[3] => ^7
)
)
/************************
* Input: Hey Matt. *
************************/
Array
(
[0] => Array
(
[id] => 2,
[content] => Hey %1.
),
[1] => Array
(
[name] => Matt
)
)
我知道我正在寻找的东西可能相当复杂,或者专门针对我的独特案例。如果您能指出我正确的方向,我将不胜感激!我什至不知道这是否可能 - 如果不是,将不胜感激!但是,我希望数据库结构尽可能接近相同。
非常感谢!
你不就是想做:
SELECT * FROM patterns WHERE 'user input' LIKE content;
在sqlfiddle上看到它。
没有现成的解决方案。这是我要做的:
1(添加3个特殊栏目like_pattern
、regexp_pattern
和placeholders
。它们的值是根据列content
计算的,要么在 PHP 中将数据加载到表中之前,要么在插入/更新触发器之前。
-
like_pattern VARCHAR(N)
- 用于反向搜索的类似模式 -
regexp_pattern VARCHAR(N)
- 正则表达式模式,用于稍后在PHP中提取部分 -
placeholders VARCHAR(N)
- 以逗号分隔的占位符名称列表
下面是示例:
+----+-------------+--------------+--------------------+--------------+
| id | content | like_pattern | regexp_pattern | placeholders |
+====+=============+==============+====================+==============+
| 1 | %1.%2.%3 | %.%.% | ^(.*).(.*).(.*)$ | 1,2,3 |
+----+-------------+--------------+-+------------------+--------------+
| 2 | Hey %name. | Hey %. | ^Hey (.*).$ | name |
+----+-------------+--------------+--------------------+--------------+
2( 对于给定的字符串搜索记录,使用 like_pattern
:
SELECT * FROM patterns WHERE 'Hey Nathanael.' LIKE like_pattern;
请注意,简单索引无法加快此查询的速度,因为我们执行反向搜索,因此根据表的大小,您可能需要不同的解决方案。
3(使用PHP的preg_match()
或ereg()
将字符串"Hey Nathanael."与返回的regexp_pattern
匹配。您将获得占位符值。
4(将它们与列中的占位符名称组合 placeholders
.
就是这样。