【问题标题】:How can I retrieve MySQL data into a PHP array and then use that array to run another query?如何将 MySQL 数据检索到 PHP 数组中,然后使用该数组运行另一个查询?
【发布时间】:2014-03-28 17:35:32
【问题描述】:

我有一个 MySQL 数据库,其中有一个表用作代表名称 id 和他/她各自的经理的主列表,一个用作经理列表的表,以及四个用作时间间隔的附加表其中记录了每日销售数据(接听电话、每次通话后用时、收入、信封、笔等)。我正在尝试每天四次收集单个给定经理下每个代表的所有统计数据。我的想法是,我应该首先收集给定经理下的名称和 ID,然后使用该数组(?)通过各种旅游间隔运行查询以收集销售统计信息。最好的方法是什么?

<?php
include 'db_connect.php';
// Get last name of manager
$query = "SELECT * FROM managers WHERE id = '" . $_SESSION['manager_name'] ."';";

$result = $mysqli -> query($query);

$row = $result -> fetch_array(MYSQLI_NUM);
$manager_first = $row[1];
$manager_last = $row[2];

// Get team members
$rep_query = "SELECT * FROM rep_master WHERE leader = '" . $manager_last . "';";

$rep_list = array();
$rep_result = $mysqli -> query($rep_query);

if ($rep_result) {
    while ($rep_row = $rep_result -> fetch_row()) {
        array_push($rep_list, $rep_row[1] . " " . $rep_row[2]);
    }
};

sort($rep_list);

print_r($rep_list);
// Stat query (using my ID as a testing point)
$stat_query = "SELECT id, total_calls, acw, revenue, envelopes, pens, other FROM tour_1 WHERE id='T441241';";

// Get row data
$stat_row = $stat_result -> fetch_array(MYSQLI_NUM);
echo '<br /><br />';
print_r($stat_row);

?>

【问题讨论】:

  • 这听起来可以通过使用两个 JOINS 并对 4 个表中的数据执行 UNION 在单个查询中完成。这是首选还是有任何条件要求单独完成查询?

标签: php mysql sql arrays


【解决方案1】:

使用 IN 和内爆:

print_r($rep_list);
// Stat query (using my ID as a testing point)
$stat_query = "SELECT id, total_calls, acw, revenue, envelopes, pens, other 
               FROM tour_1 WHERE id IN(".implode(",",$rep_list).")";

【讨论】:

    【解决方案2】:

    假设您的游览表都具有相同的结构,您可以在四个班次表上使用 UNION 并在单个查询中使用两个 LEFT JOIN 来执行此操作。我添加了一个列来显示信息来自哪个旅游。在这里,不清楚您希望如何对统计信息进行分组和过滤,因此您可能会获得具有相同领导者和代表的多行。您可以在 combinedtours 嵌套查询中添加 GROUP BY 修饰符,并在适当的位置添加 WHERE 过滤器或 ORDER BY 修饰符,以优化查询并相应地对记录进行分组、过滤和排序。

    SELECT `managers`.*, CONCAT(`rep_master`.`first_name`, ' ', `rep_master`.`last_name`), combinedtours.* FROM `managers` 
    
    RIGHT JOIN 
    `rep_master` ON `rep_master`.`leader` = `managers`.`last_name`
    
    LEFT JOIN
    (SELECT id, 1 as tour, total_calls, acw, revenue, envelopes, pens, other FROM tour_1
    UNION
    SELECT id, 2 as tour, total_calls, acw, revenue, envelopes, pens, other FROM tour_2
    UNION
    SELECT id, 3 as tour, total_calls, acw, revenue, envelopes, pens, other FROM tour_3
    UNION
    SELECT id, 4 as tour, total_calls, acw, revenue, envelopes, pens, other FROM tour_4
    ) combinedtours
    ON combinedtours.`id` = `rep_master`.`rep_id`
    

    【讨论】:

    • 我喜欢这个。给您的问题:combinedtours 列将存在于哪个表中?
    • combinedtours 不是列,而是表示嵌套查询结果的别名。它用作提取您需要的统计数据的中介
    • 由于我对 MySQL 还不是很流利,我可以简单地在控制台查询中使用上面的脚本吗?
    • 如果使用的表名和字段名与您的一致,则可以。我假设您的表名是:managers、tour_1、tour_2、tour_3 和 tour_4。除了managers.last_namerep_master.first_namerep_master.last_namerep_master.rep_id 之外,字段名称均取自您的帖子,您应该可以更改它们如果您知道表中列的名称,则转到正确的字段名称。
    • 完美。但是,当我在 PHP 中运行 print_r 命令时,它会返回经理的 ID、经理的名字、经理的姓氏、经理的密码,以及该经理列表中第一位代表的名字和姓氏以及他/她的统计信息。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多