gpt4 book ai didi

mysql - 如何将复杂的 MySQL 查询转换为 Doctrine2

转载 作者:IT王子 更新时间:2023-10-29 00:31:59 25 4
gpt4 key购买 nike

我正在尝试使用学说创建加权搜索。这就是我在直接 sql 中的做法。我想知道如何将其转换为我们的学说 2 方法。我正在尝试使用 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"

最佳答案

是的,可以使用 DQL 来完成。 Doctrine 不支持 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)
;

关于mysql - 如何将复杂的 MySQL 查询转换为 Doctrine2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9793684/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com