gpt4 book ai didi

php - 首先匹配精确然后在类似查询 mysql laravel-5 中的相关数据

转载 作者:行者123 更新时间:2023-11-29 05:55:14 25 4
gpt4 key购买 nike

我检查了this , this解决方案的链接,但找不到适合我的解决方案。

我正在尝试检索具有完全匹配的记录,然后是相关匹配。

这是我到目前为止尝试过的方法。

$facility = DB::table('facility')
->select('ID', 'Name', 'Address', 'Phone', 'Latitude', 'Longitude')
->where('Name', 'like', $q . '%')
->where('Name', '!=', '')
->limit(10)
->get();
if(empty($facility)) {
$facility1 = DB::table('facility')
->select('ID', 'Name', 'Address', 'Phone', 'Latitude', 'Longitude')
->where('Name', 'like', '%' . $q . '%')
->where('Name', '!=', '')
->limit(10)
->get();
}
$facility->{'facility1'} = $facility1;

我试图合并这 2 个对象。但是我没有得到想要的输出。

有没有办法只用一个查询就得到输出?

编辑:即我只想先检索完全匹配的记录,然后再检索其他记录。就像如果我搜索“OOS”,那么第一个记录应该是“OOS Healthcare”,然后是“Fat loss”。

最佳答案

我想做一个查询,你检查两个喜欢,然后选择一个伪列作为第一个“喜欢”是否匹配的结果,如果为假,你可以假设第二个匹配。然后简单地按伪列排序。

在原始 MySQL 中,我认为这将是:

SELECT ID, Name, Address, Phone, Latitude, Longitude,
IF(name = '$q',2,IF(name LIKE '$q%',1,0)) as `MatchStrength`
FROM facility
WHERE name like '%$q%' AND name != ''
ORDER BY MatchStrength DESC LIMIT 10

您也可以在没有额外列的情况下执行此操作:

SELECT ID, Name, Address, Phone, Latitude, Longitude
FROM facility
WHERE name like '%$q%' AND name != ''
ORDER BY IF(name = '$q',2,IF(name LIKE '$q%',1,0)) DESC LIMIT 10

将其转换为 ORM 逻辑是另一个挑战。可以尝试使用 DB::select

作为原始 SQL 运行

它很丑陋,而且可能容易受到 SQL 注入(inject)的攻击,但是试一试,看看它是否能让你到任何地方:

$facility = DB::table('facility')
->select('ID', 'Name', 'Address', 'Phone', 'Latitude', 'Longitude')
->where('Name', 'like', "%{$q}%")
->where('Name', '!=', '')
->orderByRaw("IF(name = '{$q}',2,IF(name LIKE '{$q}%',1,0)) DESC")
->limit(10)
->get();

可能可以通过使用 CONCAT 在 MySQL 中进行连接来切换到准备好的查询

关于php - 首先匹配精确然后在类似查询 mysql laravel-5 中的相关数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50015826/

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