c = conn.cursor()
search = "SELECT * FROM chavacanowords WHERE filipinoword = ? OR filipinoword = ? OR filipinoword LIKE ? OR filipinoword LIKE ?"
c.execute(search, ('%' i '%', '%' i.title() '%', '%' i '%', '%' i.title() '%'))
result = c.fetchone()
if result:
translatedwords.append(result[0])
else:
translatedwords.append(i)
我正在嘗試匹配用戶輸入的單詞。但是,c.fecthone() 獲取資料庫中最早的條目。
用戶輸入:薩拉
資料庫:(Sabroso,Sarap)(Trangka,Sara)
翻譯:Sabroso(因為 Sabroso 比 Trangka 更早進入資料庫)
我正在嘗試通過“filipinoword = ? OR filipinoword = ?”過濾掉所有確切的條目 如果完全匹配不存在“filipinoword LIKE?或filipinoword LIKE?”,則嘗試搜索相似之處
我怎樣才能以完全匹配首先出現的方式進行操作,如果沒有,則繼續進行 LIKE 部分?
uj5u.com熱心網友回復:
您可以修改查詢以使用UNION兩個查詢中的一個,第一個查找完全匹配,第二個查找不精確匹配。一個標志用于確定匹配是否準確,以及按該標志排序的結果。例如:
SELECT translation, filipinoword
FROM (
SELECT *, 1 AS exactmatch
FROM chavacanowords
WHERE filipinoword = 'sara' OR filipinoword = 'Sara'
UNION ALL
SELECT *, 0 AS exactmatch
FROM chavacanowords
WHERE filipinoword LIKE '%sara%' OR filipinoword LIKE '%Sara%'
) m
ORDER BY exactmatch DESC
LIMIT 1
db-fiddle 上的演示
排序確保如果存在完全匹配,它就是回傳的值。
WHERE出于python的目的,您可以將子句中的字串替換為?并將它們作為引數傳遞,即
search = "SELECT translation, filipinoword \
FROM ( \
SELECT *, 1 AS exactmatch \
FROM chavacanowords \
WHERE filipinoword = ? OR filipinoword = ? \
UNION ALL \
SELECT *, 0 AS exactmatch \
FROM chavacanowords \
WHERE filipinoword LIKE ? OR filipinoword LIKE ? \
) m \
ORDER BY exactmatch DESC \
LIMIT 1"
c.execute(search, (i, i.title(), '%' i '%', '%' i.title() '%'))
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/446881.html
