(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

09-06 18:19