我想选择具有至少一个搜索关键字的记录。 关键字存储在一个以逗号分隔的字段中,如下所示:
+--------------------------+
| keywords |
+--------------------------+
|symfony,html,css,php,ajax |
+--------------------------+
|symfony,php,linux,c++ |
+--------------------------+
假设用户搜索以下关键字: symfony 和 html
查询必须返回上面的这两行,因为这两行中存在关键字 symfony ,但是它仅返回包含这两个关键字的第一个女巫关键字字段
var_dump of $data['keywords']
string(12) "symfony,html"
这是查询
if (!empty($data['keywords'])) {
$keys = explode(',', $data['keywords']);
foreach ($keys as $key)
{
$qb->andWhere('j.keywords like :keyword');
$qb->setParameter("keyword", '%'.$key.'%');
}
}
答案 0 :(得分:0)
已解决
if (!empty($data['keywords'])) {
$keywords = explode(',', $data['keywords']);
$array = "";
foreach (array_slice($keywords, 1) as $key => $value) {
$array .= ' or j.keywords like :k' . $key;
$qb->setParameter('k' . $key, '%' . $value . '%');
}
$qb->andWhere('j.keywords like :keyword ' . $array);
$qb->setParameter("keyword", '%' . $keywords[0] . '%');
}
这就是查询在日志中的方式
AND (j0_.keywords LIKE ? OR j0_.keywords LIKE ? OR j0_.keywords LIKE ? OR j0_.keywords LIKE ?) [2,"%symfony%","%html%","%test non existent keyword%"] []