2014-03-28 50 views
0

我有一個MySQL數據庫,其中有一個表作爲代表性名稱ID和他/她各自的經理的主列表,作爲管理者列表的一個表和作爲時間間隔的四個附加表記錄每日銷售數據(通話,每次通話後收取的時間,收入,信封,筆等)。我試圖爲每位代表在一位特定經理的情況下每天四次收集所有統計數據。我的想法是,我應該首先收集給定經理下的姓名和ID,然後使用該數組(?)通過各個巡視間隔運行查詢以收集銷售統計信息。做這個的最好方式是什麼?如何將MySQL數據檢索到PHP數組中,然後使用該數組運行另一個查詢?

<?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

這聽起來有可能通過使用兩個連接並對4個表中的數據執行聯合來執行單個查詢。這是首選還是有任何條件需要單獨完成查詢? –

回答

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).")"; 
0

假設你遊表都具有相同的結構,你可以在四個換檔表使用工會和兩個左連接來做到這一點在一個單一的查詢。我添加了一列以顯示信息來自哪個旅程。在這裏,你不清楚你想如何分組和過濾統計數據,所以你可能會得到多個具有相同領導者和代表的行。您可以在適當位置的合併分數嵌套查詢和WHERE過濾器或ORDER BY修飾符內添加GROUP 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` 
+0

我喜歡這個。您的問題:合併欄目列在哪個表格中存在? – rvold

+0

combinedtours不是列,而是表示嵌套查詢結果的別名。它被用作中介以提取您需要的統計信息 –

+0

由於我在MySQL中並不完全流利,我是否能夠在控制檯查詢中使用上面的腳本? – rvold

相關問題