Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 从多对多表中选择包含所有这些详细信息的项。。。正确的解决方案?_Php_Mysql_Count_Many To Many - Fatal编程技术网

Php 从多对多表中选择包含所有这些详细信息的项。。。正确的解决方案?

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 您正在搜索具

(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
循环,只要
计数仍然是
=
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。努力提高自己总是一种很好的态度。如果我害怕别人会说什么,我永远不会问别人,是吗?