我有一个包含唯一MySql ID组合的数组:
例如:
[
[1,10,11],
[2,10],
[3,10,12],
[3,12,13,20],
[4,12]
]
总共有几百种不同的ID组合。
其中一些组合是“有效的”,有些则不是。例如,[1,10,11]可能是有效组合,而[3,10,12]可能无效。
组合有效或无效,具体取决于数据在数据库中的排列方式。
目前我正在使用SELECT语句来确定ID的特定组合是否有效。它看起来像这样:
SELECT id1
FROM table
WHERE id2 IN ($combination)
GROUP BY id1
HAVING COUNT(distinct id2) = $number
...其中$ combination是ID的一种可能组合(例如1,10,11),$ number是该组合中ID的数量(在本例中为3)。无效组合将返回0行。有效组合将返回1行或更多行。
但是,要解决整个可能的组合集意味着循环几百个SELECT语句,我宁愿不这样做。
我想知道:是否有任何技巧可以提高效率?是否有可能一次性将整个数据集提交给mySQL,并让mySQL迭代它?任何建议都会非常感激。
提前致谢!
答案 0 :(得分:0)
如果我正确地关注你的冒号,那么......
使用您之前描述的数据:
CREATE TABLE valid_combinations (
combination_id INT NOT NULL,
record_id INT NOT NULL
PRIMARY KEY (record_id, combination_id),
KEY (record_id)
)
则...
INSERT INTO valid_combinations (combination_id, record_id)
VALUES (1, 1);
INSERT INTO valid_combinations (combination_id, record_id)
VALUES (1, 10);
INSERT INTO valid_combinations (combination_id, record_id)
VALUES (1, 11);
INSERT INTO valid_combinations (combination_id, record_id)
VALUES (2, 2);
INSERT INTO valid_combinations (combination_id, record_id)
VALUES (2,10);
... 价值观(5,12);
然后...
SELECT 1
FROM valid_combinations a
WHERE a.record_id IN ($combination)
AND NOT EXISTS (SELECT 1 FROM valid_combinations b
WHERE b.record_id NOT IN ($combination)
AND b.combination_id=a.combination_id);
但是我真的不明白为什么你需要解决所有可能的组合。
我的解决方案可能会更快,但算法的顺序并不比你的好 - 只是将循环移动到数据库。
下进行。