使用相同的绑定参数合并两个查询

时间:2015-01-22 17:06:41

标签: php mysql

我有第一个SQL查询获取一个id_member作为参数

的表
    $stmt = $mysqli -> prepare("SELECT  a.id_alerte,
                    a.nom_alerte,
                    ar.id_roster,
                    r.nom_roster,
                FROM alerte a,
                    alerte_par_roster ar,
                    roster_par_membre rm
                INNER JOIN roster r
                    ON r.id_roster = rm.id_roster   
                WHERE rm.id_roster = ar.id_roster 
                    AND ar.id_alerte = a.id_alerte
                    AND rm.id_membre = ?");
            $stmt->bind_param('i', $id_membre); 

我需要插入第二个查询来计算另一个表中的行数。

第二个查询是:

"SELECT COUNT(DISTINCT id_roster)
                        FROM disponibilites_par_member_alertes
                        WHERE id_member = ?
                        AND id_alerte = ?"

您可以注意到id_member在两个查询中都相同但id_alerte(用作第二个查询的参数是第一个查询的结果)。 我希望我很清楚。 任何想法都将非常受欢迎

1 个答案:

答案 0 :(得分:1)

我不完全明白您的查询的目的是什么。这将有助于获得有关表结构的清晰信息以及每个字段所代表的内容。我试图根据表名进行猜测,但无法确定它是否正确。

我做的第一件事就是转换你的WHERE条件,以便明确地连接每个表。这只是为了便于阅读。

SELECT 
  a.id_alerte,
  a.nom_alerte,
  ar.id_roster,
  r.nom_roster
FROM alerte a
INNER JOIN alerte_par_roster ar
  ON ar.id_alerte = a.id_alerte
INNER JOIN roster_par_membre rm
  ON rm.id_roster = ar.id_roster 
INNER JOIN roster r
  ON r.id_roster = rm.id_roster
WHERE 
  rm.id_membre = ?

现在我们结合其他查询:

SELECT 
  a.id_alerte,
  a.nom_alerte,
  ar.id_roster,
  r.nom_roster,
  rc.id_roster_count
FROM alerte a
INNER JOIN alerte_par_roster ar
  ON ar.id_alerte = a.id_alerte
INNER JOIN roster_par_membre rm
  ON rm.id_roster = ar.id_roster 
INNER JOIN roster r
  ON r.id_roster = rm.id_roster
LEFT JOIN (
  SELECT id_membre, id_alerte, COUNT(DISTINCT id_roster) AS id_roster_count
  FROM disponibilites_par_member_alertes
  GROUP BY id_membre, id_alerte
) AS rc 
  ON rc.id_membre = rm.id_membre
  AND rc.id_alerte = ar.id_alerte
WHERE 
  rm.id_membre = ?

使用我自己生成的数据,我得到如下结果:

query result

如果这还不足以解决问题,则需要提供有关表格和设计的更多详细信息。