Php 选择更好的结果匹配

Php 选择更好的结果匹配,php,mysql,sql,Php,Mysql,Sql,我有一个小问题需要解决。我需要搜索更好的结果 我有三张表,规则,意思和规则的意思。1规则可以有1个或多个含义 这是我们的结果 SELECT * FROM rule, rule_meaning, meaning WHERE rule_meaning.rule_id = rule.id AND rule_meaning.meaning_id = meaning.i rule.id rule.name rule.id meaning_id meaning.id meaning.name 1

我有一个小问题需要解决。我需要搜索更好的结果

我有三张表,规则,意思和规则的意思。1规则可以有1个或多个含义

这是我们的结果

SELECT * FROM rule, rule_meaning, meaning WHERE rule_meaning.rule_id = rule.id AND rule_meaning.meaning_id = meaning.i

rule.id rule.name   rule.id meaning_id  meaning.id  meaning.name
1   RADIO - Ecouter   1        1          1          ACTIVER
1   RADIO - Ecouter   1        6          6          RADIO
2   LUMIERE Allumer   2        1          1          ACTIVER
3   RADIO + volume    3        6          6          RADIO
4   RADIO - volume    4        6          6          RADIO
当我搜索ACTIVER和RADIO时,我只希望有RADIO-Ecouter(rule.id=1)

我试过了

  • 其中,meaning.name=ACTIVER和meaning.name=RADIO,但没有结果

  • 其中meaning.name=ACTIVER或meaning.name=RADIO我有几个结果


您可能需要使用案例陈述,例如

    CASE WHEN WHERE meaning.name = ACTIVER AND meaning.name = RADIO
    THEN ....
    ELSE
但我想你问的是

    WHERE meaning.name = ACTIVER AND rule.name = RADIO 
    AND rule.id = 1

您希望选择同时具有ACTIVER和RADIO含义的规则。您可以通过聚合执行此操作:

select *
from rule
where id in
(
  select rule_id
  from rule_meaning 
  where meaning_id in (select id from meaning where name in ('ACTIVER', 'RADIO'))
  group by rule_id
  having count(*) = 2 -- both meanings
);
我不太喜欢的另一种方法是使用
EXISTS
IN
分别查找每个值。我在这里展示它是因为它是完成任务的简单方法

select *
from rule
where id in
(
  select rule_id
  from rule_meaning 
  where meaning_id = (select id from meaning where name = 'ACTIVER')
)
and id in
(
  select rule_id
  from rule_meaning 
  where meaning_id = (select id from meaning where name = 'RADIO')
);

你会犯什么错误?有什么问题吗
meaning.name=ACTIVER和meaning.name=RADIO
没有任何意义…任何东西怎么可能同时有两个值请在格式化文本(而不是图像)中共享您的模式和预期结果事实上,我只想选择与这两个词ACTIVER和RADIO同时匹配的结果。这就是为什么我说结果必须是规则。id 1这是唯一的