(PHP / MySQL)首先让我说这可行,并且我想知道是否有更清洁的方法。这似乎有点...野蛮?而且我以高效的编码而闻名。 :-/
TABLE (many-to-many)
scenid mapid
AA 01
AA 02
AA 04
BB 01
BB 04
CC 02
CC 03
CC 05
DD 01
DD 02
DD 03
您正在搜索具有以下所有地图的方案:01、02、03
(全部+一些其他都可以)
我当前的方法是使用此查询:
SELECT scenid, COUNT(scenid) FROM `TABLE`
WHERE mapid IN ( 01, 02, 03 )
GROUP BY scenid ORDER BY COUNT(scenid) DESC, scenid ASC
这将产生以下列表:
scenid COUNT
DD 3
AA 2
CC 2
BB 1
然后,在PHP中,我运行一个
while
循环,只要COUNT
仍是==
总mapid的数量(在本例中为3),就会将场景复制到一个新数组中。这会修剪掉仅包含某些必需地图的所有结果。同样,这有效。但是我对MySQL和PHP还是很陌生(它们是我编程的第一步),所以我一直想知道我的“作品”是否是另一个人的“你是否看到那个白痴只是在重塑轮子?lulz”
有没有更好的办法?感谢您的时间。
最佳答案
您的查询看起来还不错,但是您可以使用SQL
子句在HAVING
中进行过滤:
SELECT scenid, COUNT(*)
FROM `TABLE`
WHERE mapid IN ( 01, 02, 03 )
GROUP BY scenid
HAVING COUNT(*) = 3
ORDER BY scenid ASC