0

我有(例如)以下 MySQL 行:

名字 | 姓氏 | 另一个Col1 | 另一个Col2 | 另一个Col3
-------------------------------------------------- ------------
约翰 | 史密斯 | 足球 | 快车 | 18个傻瓜

例如以下字符串:

哦,xxx,foo,41

我正在寻找返回ohand的语句foo,因为行单元格确实包含这些子字符串(oh:J oh n,fooFoo tball & Foo ls)。

4

3 回答 3

3

一个可能的解决方案

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演示

于 2013-08-09T08:06:05.333 回答
0

如果您的表格是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 );

希望这可以帮助。

于 2013-08-09T08:08:52.877 回答
0

这主要是您希望谁承担工作量的主要问题。在我的解决方案中,我会选择使用 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";
                }
            }
        }
    }
?>

希望这会有帮助。

于 2013-08-09T08:09:14.253 回答