在sqlite中多个LIKE

Ann*_* K. 8 sql sqlite search select sql-like

我正在尝试创建一个搜索功能.

如果搜索输入字段是"foo bar",我将其拆分为两个关键字然后执行此查询:

SELECT p.* FROM p_extra_fields as x INNER JOIN products as p ON x.product = p.id
  WHERE x.type = "1"
  AND
  (
     (x.key = "model" AND x.value LIKE "%foo%")
  OR (x.key = "model" AND x.value LIKE "%bar%")
  OR (x.key = "color" AND x.value LIKE "%foo%")
  OR (x.key = "color" AND x.value LIKE "%bar%")
  OR (x.key = "make" AND x.value LIKE "%foo%")
  OR (x.key = "make" AND x.value LIKE "%bar%")
  )      

GROUP BY x.product LIMIT 0, 50
Run Code Online (Sandbox Code Playgroud)

关键字的数量可能更高,因此我可能需要更多"喜欢"."钥匙"的数量也可以增加:)

有什么办法可以简化这个查询吗?我能做点什么LIKE("%foo%", "%bar%")吗?

dav*_*mos 6

如果启用了SQLite FTS3和FTS4 Extensions,则可以利用全文搜索(FTS)功能.您需要将p_extra_fields表重新创建为VIRTUAL表.然后,您可以OR在搜索条件之间插入并使用MATCH运算符...

SELECT p.* 
FROM p_extra_fields x
JOIN products p ON p.id = x.product
WHERE x.key IN ('model', 'color', 'make')
AND x.type = '1'
AND x.value MATCH 'foo OR bar'
GROUP BY x.product LIMIT 0, 50;
Run Code Online (Sandbox Code Playgroud)

这里还有好消息.单击此处查看SQL Fiddle的操作.