Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/249.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.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 迭代MySQL关联数组以构建新的MySQL结果集_Php_Mysql_Database_Associative Array - Fatal编程技术网

Php 迭代MySQL关联数组以构建新的MySQL结果集

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

我希望这个标题有意义,如果没有,我会在这里澄清。首先,像我处理的许多代码一样,我继承了这一点,或者只是监督它,并且没有被授予使用mysqli重新编写的权限,所以请省去那些“你现在做错了”的帖子。提前谢谢

表1的布局如下所示

+----+-----------+------------+
| 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'];
    }

 ?>