cha*_*sen 10 mysql symfony doctrine-orm
我正在尝试使用doctrine创建加权搜索.这是我在直接sql中的方式.我想知道如何将它转换为我们的doctrine2方法.我正在尝试使用symfony2进行此搜索.
此外,如果有更好的方法,我愿意这样做.谢谢.
"SELECT *,
IF(`name` LIKE "%$searchterm%", 20,
IF(`name` LIKE "%$searchterm%", 10, 0)) +
IF(`address` LIKE "%$searchterm%", 5, 0) +
IF(`city` LIKE "%$searchterm%", 1, 0)
AS `weight`
FROM `table_name`
WHERE
(`name` LIKE "%$searchterm%" OR
`address` LIKE "%$searchterm%" OR
`city` LIKE "%$searchterm%")
ORDER BY `weight` DESC
LIMIT 20"
Run Code Online (Sandbox Code Playgroud)
Mun*_*Das 17
是的,它可以使用DQL.学说不支持IF陈述.但是CASE声明可以实现相同的功能.样品DQL如下,
$dql = "SELECT t,
(CASE
WHEN (t.name LIKE :searchterm) THEN 10
ELSE 0
END) +
(CASE
WHEN (t.address LIKE :searchterm) THEN 5
ELSE 0
END) +
(CASE
WHEN (t.city LIKE :searchterm) THEN 1
ELSE 0
END)
AS weight
FROM YourBundleName:TableName t
WHERE
t.name LIKE :searchterm OR
t.address LIKE :searchterm OR
t.city LIKE :searchterm
ORDER BY weight DESC
";
$query = $entityManager->createQuery($dql)
->setFirstResult(0)
->setMaxResults(20)
->setParameter('searchterm' , $searchterm)
;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3318 次 |
| 最近记录: |