下午,这是我的问题:
用户可以对搜索进行多项选择,我们需要从表中的单个列中进行选择,在该列中,我们将用户ID与条件进行了匹配(您将在下面看到示例查询)。这些项目可以是AND / OR的组合。例如:
用户ID可以包含以下项目:
1和3或4
或:
1、3和4
用户将输入要在搜索中应用的逻辑,因此我们不确定在选择(AND / OR)中将采用什么标准。我需要找到一种有效的解决方案来运行查询/流程以返回结果。
我尝试了一个php进程来选择所有条件,然后根据用户选择(和/或)对结果进行排序的逻辑,但这在某些大型表上会产生巨大的性能开销。一天后仍在进行一次搜索。
以下查询非常有效,除非有人有其他想法,否则我可能必须编写一些代码以生成如下所示的sql语句,然后运行查询以获取结果。但是,由于AND和OR的混合,使操作变得复杂。该查询很简单,因为逻辑都是AND:
select distinct(va1.userid) FROM validation_abilities as VA1
INNER JOIN validation_abilities as va2 ON va1.userid = va2.userid
INNER JOIN validation_abilities as va3 ON va1.userid = va3.userid
INNER JOIN validation_abilities as va4 ON va1.userid = va4.userid
INNER JOIN validation_abilities as va5 ON va1.userid = va5.userid
WHERE va1.ability_id = ‘179’
AND va2.ability_id = ‘178’
AND va3.ability_id = ‘289’
AND va4.ability_id = ‘287’
AND va5.ability_id = ‘328’
我只需要查看是否有更有效的设计,您怎么看?