我有(例如)以下 MySQL 行:
名字 | 姓氏 | 另一个Col1 | 另一个Col2 | 另一个Col3 -------------------------------------------------- ------------ 约翰 | 史密斯 | 足球 | 快车 | 18个傻瓜
例如以下字符串:
哦,xxx,foo,41
我正在寻找返回oh
and的语句foo
,因为行单元格确实包含这些子字符串(oh
:J oh n,foo
:Foo tball & Foo ls)。
一个可能的解决方案
SELECT q.keyword
FROM Table1 t CROSS JOIN
(
SELECT 'oh' keyword UNION ALL
SELECT 'xxx' UNION ALL
SELECT 'foo' UNION ALL
SELECT '41'
) q
WHERE INSTR(CONCAT_WS(' ', firstname,
lastname,
anotherCol1,
anotherCol2), q.keyword) > 0
输出:
| 关键字 | ------------ | 哦 | | 富 |
这是SQLFiddle演示
如果您的表格是MyISAM
,您可以使用全文搜索
index
使用以下命令在您的表上创建一个:
ALTER TABLE <TABLE_NAME> ADD FULLTEXT(firstname, lastname, anotherCol1, anotherCol2, anotherCol3 );
现在,运行您的查询(使用boolean
模式,因为您必须匹配多个关键字):
SELECT * FROM <TABLE_NAME> WHERE MATCH(firstname, lastname, anotherCol1, anotherCol2, anotherCol3) AGAINST ('+oh +xxx +foo +41' IN BOOLEAN MODE );
希望这可以帮助。
这主要是您希望谁承担工作量的主要问题。在我的解决方案中,我会选择使用 PHP,因为数据库是用于查询数据,而不是用于计算或处理数据。
现在,首先,您将从数据库中获取所有数据。
SELECT * FROM table;
不多也不少。这将返回表中的每一列和每一行。现在是 PHP 部分。
<?php
while($row = mysqli_fetch_assoc($result)) {
foreach($row as $header => $col) {
foreach($strings as $str) {
if(strstr($col, $str) !== false) {
echo "$str found in column $header";
}
}
}
}
?>
希望这会有帮助。