在这种情况下使用和/或逻辑的最佳实践?

时间:2019-07-09 00:49:14

标签: mysql

下午,这是我的问题:

用户可以对搜索进行多项选择,我们需要从表中的单个列中进行选择,在该列中,我们将用户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’

我只需要查看是否有更有效的设计,您怎么看?

0 个答案:

没有答案