我有一个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);
?>
答案 0 :(得分:0)
使用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).")";
答案 1 :(得分:0)
假设您的巡视表都具有相同的结构,您可以在四个移位表和两个LEFT JOIN上使用UNION来在单个查询中执行此操作。我添加了一个列来显示信息的来源。在这里,您不清楚如何对统计信息进行分组和过滤,因此您可能会获得具有相同领导者和代表的多行。您可以在 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`