Php 迭代MySQL关联数组以构建新的MySQL结果集
我希望这个标题有意义,如果没有,我会在这里澄清。首先,像我处理的许多代码一样,我继承了这一点,或者只是监督它,并且没有被授予使用mysqli重新编写的权限,所以请省去那些“你现在做错了”的帖子。提前谢谢 表1的布局如下所示Php 迭代MySQL关联数组以构建新的MySQL结果集,php,mysql,database,associative-array,Php,Mysql,Database,Associative Array,我希望这个标题有意义,如果没有,我会在这里澄清。首先,像我处理的许多代码一样,我继承了这一点,或者只是监督它,并且没有被授予使用mysqli重新编写的权限,所以请省去那些“你现在做错了”的帖子。提前谢谢 表1的布局如下所示 +----+-----------+------------+ | id | from_name | from_email | +----+-----------+------------+ | 1 | John | john@a.com | | 2 | J
+----+-----------+------------+
| id | from_name | from_email |
+----+-----------+------------+
| 1 | John | john@a.com |
| 2 | Juan | juan@a.com |
| 3 | Mark | mark@a.com |
| 4 | John | john@a.com |
+----+-----------+------------+
我这样查询它以得到我需要的结果
<?php
$q = "SELECT `id` FROM `table_1` WHERE `from_email` = 'john@a.com'";
$r = mysql_query($q) or die(mysql_error()); // mysql_error is removed in production
$ids = mysql_fetch_assoc($r);
?>
现在我需要获取这些ID,并在表2中的WHERE子句中使用它们,该子句保存大小信息,以便计算所有消息的总大小。表2是这样的
+----+---------+------------+
| id | table_1 | size |
+----+---------+------------+
| 1 | 1 | 44023 |
| 2 | 2 | 372 |
| 3 | 3 | 13243 |
| 4 | 4 | 423115 |
+----+---------+------------+
根据我想要的解决方案,我应该能够构造一个while或foreach循环,以获得大小,并让我添加正确的大小?我尝试了以下方法:
<?php
$total_size = 0;
while($ids = mysql_fetch_assoc($r)){
$q2 = "SELECT `size` FROM `table_2` WHERE `table_1` = '".$ids['id']."'";
$r2 = mysql_query($q2) or die mysql_error()); // removed in production
$add = mysql_fetch_assoc($r2);
$total_size = $total_size + $add['size'];
}
?>
但是当我转到echo$total_size时,我什么也看不到,屏幕上甚至没有0,而且MySQL也没有抛出错误。如果我最初设计了这个表,那么所有这些数据都会在同一个表中,但因为我没有,我别无选择,只能让它工作。从外观上看,它应该会起作用。@Michael Berkowski-感谢您的内部连接和总和选择语句。工作完美
在一个查询中,您可以使用简单的子查询方式:从表2中选择大小,其中表1位于从表1中选择id的位置john@a.com'或更快的联接方法:从table_2上的table_2内部联接table_1中选择大小。table_1=table_1.id,其中table1.email='1john@a.com——迈克尔·伯克夫斯基
然后,您只需要一个fetch循环。实际上,您甚至可以在一个查询中进行聚合计数,并跳过几乎所有的PHP。从表2内部联接表1中选择SUMsize.–Michael Berkowski删除SELECT后多余的双引号。对不起,在我试图格式化文章的所有内容时,这是一个打字错误。我已经删除了它。为什么不使用一个连接表和计算预期结果集的查询呢?我认为这里的计算不需要PHP。在一个查询中,您可以使用简单的子查询方式:从表2中选择大小,其中表1位于从表1中选择id,其中电子邮件地址为john@a.com'或更快的联接方法:从table_2上的table_2内部联接table_1中选择大小。table_1=table_1.id,其中table1.email='1john@a.com'然后只需要一个获取循环。实际上,您甚至可以在一个查询中进行聚合计数,并跳过几乎所有的PHP。从表2内部联接表1中选择SUMsize。。。。
<?php
$total_size = 0;
while($ids = mysql_fetch_assoc($r)){
$q2 = "SELECT `size` FROM `table_2` WHERE `table_1` = '".$ids['id']."'";
$r2 = mysql_query($q2) or die mysql_error()); // removed in production
$add = mysql_fetch_assoc($r2);
$total_size = $total_size + $add['size'];
}
?>