我已对此进行了研究,但无法找到针对我的具体问题的解决方案。
我有一个包含特定格式数据的列。以下是一些例子:
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"
提前感谢您的帮助!
答案 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?