我有一个名为“matches”的表,其中我通过 id 将表“numbers”中的 items 与表“letters”中的 items 关联起来。
所以看起来像
number_id, letter_id
1,10
2,10
3,10
5,11
4,23
7,19
1,19
3,64
现在用户输入一个数字数组,比如 1,2,3 我必须找到所有数字都是 1,2,3 的字母,即 10。如果他们给出 1,7,则会给出 19,如果他们给出 3,则会给出 64。
我怎样才能做到这一点?
我一直在尝试为此编写一个递归函数,但它总是失败。 有没有某种:
SELECT letter_id WHERE **number_id***s* = 1,2,3. That would be perfect. :)
最佳答案
这可能适用于所有情况,也可能不适用于所有情况,但我尝试使用 (1,2,3) 和 (1,7):
select distinct letter_id
from r r1
inner join r r2 using (letter_id)
where r1.number_id in (1, 7)
and r2.number_id in (1,7)
and (r1.number_id r2.number_id);
您必须能够使用某种编程语言动态提供 (1,7)
或 (1,2,3)
。
凌晨 3:30 摇晃婴儿...
编辑:要完成@Martin的答案,您可以使用order by field()
select letter_id
from (
select letter_id,
group_concat(number_id order by field(number_id,2,1,3)) as numset
from r
group by letter_id
) as Martin
where numset = '2,1,3';
关于php - 选择具有多个相同项的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4301341/