2017-08-09 129 views
1

我想計算相同的字段兩次,因爲當前設置輸入工作代碼爲'10','11','12','13','40','400', '80'作爲完成的工作,但是其他工作代碼喜歡55,56,57意味着工作沒有完成。計算相同的字段兩次

以下我設法計算了work_code表並顯示了成功完成的工作量,但是我在如何計算未完成的作業(即55,56等)的同一張表上掙扎,也。

下面是我的代碼.....

<?php 
require 'db.php'; 

    $sqltran = mysqli_query($con, "SELECT *, ROUND(SUM(Sales),0), ROUND(AVG(Sales),2), COUNT(Work_Code) FROM results_tbl_1 WHERE RECORD_ID BETWEEN 468100 AND 500000 AND Work_Code IN ('10', '11', '12', '13', '40', '400', '80') GROUP BY ENG_ID ORDER BY ROUND(SUM(Sales),0) DESC ") or die(mysqli_error($con)); 

    $arrVal = array(); 

    $i=1; 
    while ($rowList = mysqli_fetch_array($sqltran)) { 

        $name = array(
          'num' => '<img alt="" height="16" src="./top10.png" width="16">' . $i, 


          'eng'=> $rowList['ENG_ID'], 

          'totalvisits'=> $rowList['COUNT(Work_Code)'], 

          'ajv'=> '£' . $rowList['ROUND(AVG(Sales),2)'], 

          'sales'=> '£' . $rowList['ROUND(SUM(Sales),0)'], 





         );  


         array_push($arrVal, $name); 
     $i++;   
    } 
     echo json_encode($arrVal);   


    mysqli_close($con); 

然後將數據與下面的配置自舉表顯示..

<script type="text/javascript"> 

var $table = $('#table'); 
     $table.bootstrapTable({ 
       url: 'test/board.php', 
       search: false, 
       pagination: true, 
       buttonsClass: 'primary', 
       showFooter: false, 
       minimumCountColumns: 2, 
       columns: [{ 
        field: 'num', 
        title: 'Rank', 
        sortable: false, 
       },{ 
        field: 'eng', 
        title: 'Engineer', 
        sortable: false, 
       },{ 
        field: 'totalvisits', 
        title: 'Total Jobs', 
        sortable: false, 
       },{ 
        field: 'ajv', 
        title: 'AJV', 
        sortable: false, 
       },{ 


        field: 'sales', 
        title: 'Total', 
        sortable: false, 
       }, ], 

     }); 

我的問題是如何我可以計算工作代碼55,56等,並在桌上顯示計數?

謝謝:)

+0

爲什麼不運行帶有工作代碼ID(如55,56,57)的第二個查詢? – Andy

+0

要顯示標記爲未完成的用戶數 – Jamie

+0

我仍然沒有看到問題。你運行第一個查詢(用10,11,12),並從結果中獲得COUNT。然後你運行第二個查詢(55,56等),並從第二個結果中獲得COUNT。那有什麼問題?唯一改變的是ID處於'IN'狀態 - 顯然會影響計數/結果。但那就是你想要的。 – Andy

回答

-2

也許你想使用UNION的兩個SELECT與相應的工作代碼。

-2

我可能會錯過顯而易見的,但爲什麼不包括在「work_code in」子句中未完成的代碼?

+0

分組因爲這是計數工作代碼10,11等意味着工作完成,其他工作代碼55,56等意味着工作沒有完成,所以我想顯示未完成的工作量隨着工作的完成。 – Jamie

1

創建兩個新陣列,一個用於指示完成的作業代碼,另一個用於指示不完整的作業代碼。另外,在這種情況下,不要嘗試在查詢中進行計數。

然後,在循環查看結果時,測試$row['Work_Code'] against the arrays using array_search()`。您還需要兩個變量來存儲計數。

這將是這個樣子:

$completedJobs = array(1,2,3,4,5); 
$incompleteJobs = array(7,8,9,10,11); 
$completeTotal = 0; 
$incompleteTotal = 0; 
$i=1; 
    while ($rowList = mysqli_fetch_array($sqltran)) { 
     //I've stripped out what is not relevant to my example 
     if(array_search($rowList['Work_Code'], $completedJobs) { 
      $completeTotal++;       
    } 
    if(array_search($rowList['Work_code'],$incompleteJobs){ 
      $incompleteTotal++; 
    } 

} 
+0

非常感謝,但是我如何在我的桌子上顯示回覆? - 我已經更新了上面的問題,我正在使用的代碼將其顯示在我的桌子上。 – Jamie

+0

一種方法是在呈現頁面時將計數作爲隱藏輸入中的值。 'echo「」; 然後抓取jQuery中的值: – Difster

+0

當您執行'json_encode($ arrVal);'時,其中的值已經來自數據庫。所以只要他們在單獨的數組鍵'$ arrVal ['num_complete_jobs']'和'$ arrVal ['num_incomplete_jobs']'你應該仍然能夠引用他們在你的ajax – Andy

0

只要運行2個獨立的查詢,使用不同的值IN子句中:

已完成的作業:

<?php 
require 'db.php'; 

$sql_complete = mysqli_query($con, "SELECT *, ROUND(SUM(Sales),0), ROUND(AVG(Sales),2), COUNT(Work_Code) FROM results_tbl_1 WHERE RECORD_ID BETWEEN 468100 AND 500000 AND Work_Code IN ('10', '11', '12', '13', '40', '400', '80') GROUP BY ENG_ID ORDER BY ROUND(SUM(Sales),0) DESC ") or die(mysqli_error($con)); 

while ($rowList = mysqli_fetch_array($sql_complete)) { 
    // Outputs the number of completed jobs: 
    echo $rowList['COUNT(Work_Code)']; 
} 
?> 

未完成的作業:

<?php 

$sql_incomplete = mysqli_query($con, "SELECT *, ROUND(SUM(Sales),0), ROUND(AVG(Sales),2), COUNT(Work_Code) FROM results_tbl_1 WHERE RECORD_ID BETWEEN 468100 AND 500000 AND Work_Code IN ('55', '56', '57') GROUP BY ENG_ID ORDER BY ROUND(SUM(Sales),0) DESC ") or die(mysqli_error($con)); 

while ($rowList = mysqli_fetch_array($sql_incomplete)) { 
    // Outputs the number of incomplete jobs: 
    echo $rowList['COUNT(Work_Code)']; 
} 
?> 
+0

謝謝你,但我怎麼能顯示我的桌子上的迴應? - 我已經更新了上面的問題,我正在使用的代碼將其顯示在我的桌子上。 – Jamie

0

隨着假設,即不在「已完成作業」代碼列表所有代碼是不完整的,查詢可能是這樣簡單:

SELECT *, ROUND(SUM(IF(complete, Sales, null)),0), ROUND(AVG(IF(complete, Sales, null)),2), COUNT(IF(complete, 1, null)), COUNT(IF(complete, null, 1)) 
FROM (SELECT *, Work_Code IN ('10', '11', '12', '13', '40', '400', '80') as complete 
    FROM results_tbl_1 
) separated 
WHERE RECORD_ID BETWEEN 468100 AND 500000 
GROUP BY ENG_ID 
ORDER BY ROUND(SUM(Sales),0) DESC 

不相關的問題,有幾件事情

  • 在聚合查詢永遠不會做SELECT *,
  • 使用別名來聚集列

所以更好的版本查詢的是:

SELECT 
    ENG_ID, 
    ROUND(SUM(IF(complete, Sales, null)),0) as Total_sales_complete, 
    ROUND(AVG(IF(complete, Sales, null)),2) as Average_sales_complete, 
    COUNT(IF(complete, 1, null)) as Count_complete, 
    COUNT(IF(complete, null, 1)) as Count_incomplete 
FROM (SELECT *, Work_Code IN ('10', '11', '12', '13', '40', '400', '80') as complete 
    FROM results_tbl_1 
) separated 
WHERE RECORD_ID BETWEEN 468100 AND 500000 
GROUP BY ENG_ID 
ORDER BY Total_sales_complete DESC 

編輯:

在PHP代碼中的唯一變化是使用別名:

$name = array(
'num' => '<img alt="" height="16" src="./top10.png" width="16">' . $i, 
'eng'=> $rowList['ENG_ID'], 
'totalvisits'=> $rowList['Count_complete'], 
'ajv'=> '£' . $rowList['Total_sales_complete'], 
'sales'=> '£' . $rowList['Average_sales_complete'], 

'theSecondCount'=> $rowList['Count_incomplete'], 
);  

,然後在JavaScript側添加額外的列:

  { 
       field: 'theSecondCount', 
       title: 'Incomplete Jobs', 
       sortable: false, 
      } 

作爲請注意,標題「總計工作」有點令人誤解,因爲它顯示完成工作,而「總計」一詞意味着所有工作。

+0

謝謝你,但我怎樣才能在我的桌子上顯示響應? - 我已經更新了上面的問題,我正在使用的代碼將其顯示在我的桌子上。 – Jamie

+0

更新了答案,但說實話,我發佈我的答案後添加了javascript「我怎樣才能顯示響應」部分。它顯示絕對缺乏研究工作,並且違反了不把多個問題合併爲一個的Stackoverflow政策。請將來避免它。 –

相關問題