编写SQLite查询以从表中搜索数据的最佳实践?
例如,我们有这个数据集:
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)
首先,我们必须计算搜索字符串的出现。设置其列名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)