【问题标题】:how to match partial search query from 2 columns in lumen如何匹配 lumen 中 2 列的部分搜索查询
【发布时间】:2023-02-10 20:27:21
【问题描述】:

我有一个名为 stores 的表,其中包含名称和地址列。

我有一个有名字的商店记录; “目标”和地址; “112 W 34th St., New York, NY 10120, United States”。

我的期望:

在数据库中查询“Target NY”应该返回上面的记录

当前结果:

数据库查询找不到记录。

我试过的:

        $stores = DB::table('stores')
        ->where('name', 'like', "%$query%")
        ->orWhere('address', 'like', "%$query%")
        ->get();

上面的查询无法找到记录。

我也试过在两列上连接查询

        $stores = DB::select("
            SELECT *
            FROM stores
            WHERE CONCAT(name, ' ', address) LIKE '%".$query."%'
        ");

上面的例子也找不到记录。

我不想相信不可能按我的意愿查询表。

如果可以执行该查询,我该怎么做?

【问题讨论】:

    标签: mysql laravel lumen


    【解决方案1】:

    您可以使用MATCHAGAINST 作为搜索名称和地址字符串。

    $stores = DB::select("
        SELECT *
        FROM stores
        WHERE MATCH(name, address) AGAINST (? IN BOOLEAN MODE)
       ", [$query]);
    

    注意事项:为了使用MATCH 功能,您需要在名称和地址列上设置full-text index

    您可以在 sql 中通过此查询进行设置:ALTER TABLE stores ADD FULLTEXT INDEX ft_index (name, address);

    【讨论】:

      猜你喜欢
      • 2020-11-09
      • 2017-03-02
      • 1970-01-01
      • 2011-11-02
      • 2019-10-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-10
      相关资源
      最近更新 更多