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

标签 php mysql database associative-array

我希望标题有意义,如果没有,我会尝试在这里澄清。首先,就像我处理的许多代码一样,我继承了这个或只是监督它,并且没有获得使用 mysqli 重写的权限,所以请保留“你现在做错了”的帖子。提前致谢。

table_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);

 ?>

现在,当我迭代此操作并将 ids 打印到屏幕上时,我得到了预期的结果,

1
4

现在我需要获取这些 ID 并在 Table_2 中保存大小信息的 WHERE 子句中使用它们,以便我可以计算所有消息的总大小。 Table_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 - 感谢您的 INNER JOIN 和 SUM() SELECT 语句。工作完美。

“在一个查询中,您可以采用简单的子查询方式:SELECT size FROM table_2 WHERE table_1 IN (SELECT id FROM table_1 WHERE email = 'john@a.com') 或可能更快的联接方法:SELECT大小 FROM table_2 INNER JOIN table_1 ON table_2.table_1 = table_1.id WHERE table1.email = 'john@a.com'"– Michael Berkowski

“这样您只需要一个获取循环。实际上,您甚至可以在一个查询中执行聚合 COUNT() 并跳过几乎所有 PHP。SELECT SUM(size) FROM table_2 INNER JOIN table_1....” – Michael Berkowski

关于php - 迭代 MySQL 关联数组以构建新的 MySQL 结果集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13090711/

相关文章:

php - 用于删除具有重复条目的行的 MySQL 查询

MySQL 删除级联

mysql - 如何添加一个字段来计算查询检索到的记录数?为什么我会收到此错误消息?

php - Jquery 用于无需刷新提交(无需验证)

php - fatal error :调用未定义的方法 Google_IO_Curl::authenticatedRequest()

php - mysql 存储用户代理、推荐等的最有效方式

mysql - DRUPAL PDO异常 : SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens

mysql - 连接类别和子类别

php - 更新 mySQL 查询无效

sql - 两个不同的表还是只有一个带有 bool 列的表?