如何在mysql语句中使用LIKE和通配符

时间:2014-05-06 09:21:45

标签: php mysql select sql-like

我已对此进行了研究,但无法找到针对我的具体问题的解决方案。

我有一个包含特定格式数据的列。以下是一些例子:

1
6
14
1;6;14;16
etc...

我需要一个mysql语句,例如它会选择16所在的所有列。

我已经尝试了这个但是它也选择了1和6出现的列:

"SELECT * FROM tbl WHERE kategorien LIKE '%".$_GET['katid']."%' AND status = 1 ORDER BY pos ASC"

提前感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

您可以尝试创建这样的辅助函数:

// Helper function
function getLike($str, $deliminator = ';', $field = 'kategorien') {
    if (false !== strpos($str, $deliminator)) {
        $strParts = explode($deliminator, $str);
        return "($field LIKE '%". implode("%' OR $field LIKE '%", $strParts) . "%')";
    } else {
        return "$field LIKE '%$str%'";
    }
}

// Debug
var_dump(getLike('1;6;14;16'));

输出:

string '(kategorien LIKE '%1%' OR kategorien LIKE '%6%' OR kategorien LIKE '%14%' OR kategorien LIKE '%16%')' (length=100)

在您的查询中,您可以像这样使用它:

"SELECT * FROM tbl WHERE ". getLike($_GET['katid']) ." AND status = 1 ORDER BY pos ASC"

答案 1 :(得分:0)

您可以使用MySQL函数FIND_IN_SET

SELECT * FROM tbl
WHERE
  FIND_IN_SET('16', REPLACE(kategorien, ';', ','))>0

但是,在单个字段中存储逗号分隔值通常不是一个好主意,请查看此问题:Is storing a delimited list in a database column really that bad?