Php 从多对多表中选择包含所有这些详细信息的项。。。正确的解决方案?
(PHP/MySQL)让我先说一句,这是可行的,我想知道是否有更干净的方法。这似乎有点。。。野蛮的?我也不知道我的高效编码-/Php 从多对多表中选择包含所有这些详细信息的项。。。正确的解决方案?,php,mysql,count,many-to-many,Php,Mysql,Count,Many To Many,(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 您正在搜索具
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
循环,只要计数仍然是=
MAPID的总数(在本例中为3),就将SCENID复制到一个新数组。这将修剪所有只包含部分所需贴图的结果
同样,这是有效的。但我对MySQL和PHP还是很陌生(这是我编程的第一步),所以我总是想知道我的“作品”是不是别人的“你看到那个白痴刚刚重新发明轮子了吗?lulz”
有更好的办法吗?谢谢您的时间。您的查询看起来不错,但是您可以使用HAVING
子句在SQL
中进行筛选:
SELECT scenid, COUNT(*)
FROM `TABLE`
WHERE mapid IN ( 01, 02, 03 )
GROUP BY scenid
HAVING COUNT(*) = 3
ORDER BY scenid ASC
如果你害怕别人会说你的代码,你就不可能成为一个好的程序员。每个人在开始时都写了shitcode。努力提高自己总是一种很好的态度。如果我害怕别人会说什么,我永远不会问别人,是吗?