编写SQLite搜索查询的最佳方法?

问题描述 投票:0回答:1

编写SQLite查询以从表中搜索数据的最佳实践?

  1. 最相关的结果应该放在顶部
  2. 结果应按搜索词的出现顺序排序
  3. [如果发生相同的情况,
    1. 以搜索词开头的单词应放在最前面。
    2. 单词中间包含搜索字符串,应稍后出现。
    3. 如果发现多个具有相同出现方式的单词,则应按字母顺序排序。

例如,我们有这个数据集:

Borges Extra Virgin Olive Oil
Canola Oil Bottle
Extra Virgin Olive Oil - Olive Jar
Extra Virgin Olive Oil - Olive Tin
Olive Pomace Oil
Supreme Cooking Oil    

当搜索词为O时应为

Extra Virgin Olive Oil - Olive Jar (3 Occuracne of `O` in start)
Extra Virgin Olive Oil - Olive Tin (3 Occuracne of `O` in start)
Borges Extra Virgin Olive Oil (2 Occuracne of `O` in the start and 1 in mid)
Olive Pomace Oil (2 Occuracne of `O` in the start)
Canola Oil Bottle (1 Occuracne of `O` in the start and 2 in the mid)
Supreme Cooking Oil (1 Occuracne of `O` in the start and 2 in the mid)

当搜索词为Ol时应为

Extra Virgin Olive Oil - Olive Jar (2 Occuracne of `Ol` in start)
Extra Virgin Olive Oil - Olive Tin (2 Occuracne of `Ol` in start)
Borges Extra Virgin Olive Oil (1 Occuracne of `Ol` in start)
Olive Pomace Oil (1 Occuracne of `Ol` in start)
Canola Oil Bottle (1 Occuracne of `Ol` in the mind)

当搜索词为Oli时,输出应为

Extra Virgin Olive Oil - Olive Jar (2 Occuracne of `Oli` in start)
Extra Virgin Olive Oil - Olive Tin (2 Occuracne of `Oli` in start)
Borges Extra Virgin Olive Oil (1 Occuracne of `Oli` in start)
Olive Pomace Oil (1 Occuracne of `Oli` in start)
jquery sql sqlite search
1个回答
0
投票

首先,我们必须计算搜索字符串的出现。设置其列名priority。然后,我们根据搜索结果对所有记录进行排序。

let searchTerm = 'Oil';
let searchQuery = `
   SELECT (length(trim(name)) - length(replace(trim(name), '${searchTerm}', ''))) as 'priority', *
   FROM product
   WHERE
       NAME LIKE '${searchTerm}' OR
       NAME LIKE '${searchTerm}%' OR
       NAME LIKE '% ${searchTerm}%' OR
       NAME LIKE '%${searchTerm}%'
   ORDER BY 1 DESC, NAME ASC
   LIMIT 0, 20
`;

输出将是:

Extra Virgin Olive Oil - Olive Jar (2 Occuracne of `Oli` in start)
Extra Virgin Olive Oil - Olive Tin (2 Occuracne of `Oli` in start)
Borges Extra Virgin Olive Oil (1 Occuracne of `Oli` in start)
Olive Pomace Oil (1 Occuracne of `Oli` in start)
© www.soinside.com 2019 - 2024. All rights reserved.