我有第一个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
(用作第二个查询的参数是第一个查询的结果)。
我希望我很清楚。
任何想法都将非常受欢迎
答案 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 = ?
使用我自己生成的数据,我得到如下结果:
如果这还不足以解决问题,则需要提供有关表格和设计的更多详细信息。