gpt4 book ai didi

php - MySQL 计算具有行值的数据,无需新的查询循环

转载 作者:行者123 更新时间:2023-11-29 22:59:01 25 4
gpt4 key购买 nike

我有 4 张 table 用于存放时事通讯。时事通讯、订阅者、订阅者组和选定的订阅者组。我在事件编辑区域中选择了订阅者组,并将选定的组保存到 tbl_newsletter_groups 表中,例如:

tbl_newsletters

NID    title     details
1 text 1 content 1
2 text 2 content 2

tbl_subscriber_groups

GID   group_name
5 group 1
6 group 2

tbl_subscribers

SID   GID  email             name
10 5 sub1@mail.com sub1 name
11 6 sub1@mail.com sub1 name

tbl_newsletter_groups

NGID    NID   GID
15 1 6
16 1 6
17 1 6

当我在页面中列出新闻通讯时,我想显示所选订阅者的总数。我的解决方案工作正常,我正在寻找简单明了的声明,有没有像单个时事通讯列表声明那样更快的方法?

这是我自己的计数风格(是的,我知道它太糟糕而且太长了);

$subGID = array();
$list = $myconn->query("SELECT * FROM tbl_newsletters");
while($listRs = $list->fetch_assoc()){
$grps = $myconn->query("SELECT * FROM tbl_newsletter_groups WHERE NID=". $listRs['NID'] ."");
while($grpsRs = $grps->fetch_asscoc()){
$subGID[] = $grpsRs['GID'];
} $grps->free();
$subs = implode(" OR GID=",$subGID);
$count = mysqli_num_rows($myconn->query("SELECT ID FROM tbl_subscribers WHERE GID=". $subs));
echo('Total Selected Subscriber: '.$count);
} $list->free();

谢谢。

最佳答案

您想要的搜索词是“基于集合的逻辑”。

您的想法是正确的:您需要来自 tbl_newsletters 的所有内容,然后您需要计算来自 tbl_subscribers 的结果,但为了获得这些结果,您需要来自 的信息tbl_newsletter_groups

在 SQL 中,这表示您需要联接。您已经发现了所需的条件,只是不知道语法。引用手册可以提供帮助。

现在您将拥有一堆记录,您需要将其分解为更少数量的记录。您需要聚合函数和 GROUP BY 子句。

这是最终的查询:

SELECT n.NID, n.title, n.details, COUNT(s.SID)
FROM tbl_newsletters AS n
JOIN tbl_newsletter_groups AS g ON n.NID = g.NID
JOIN tbl_subscribers AS s ON g.GID = s.GID
GROUP BY n.NID

关于php - MySQL 计算具有行值的数据,无需新的查询循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28590833/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com