Page 1 of 1

ใช้ loop foreach แล้วข้อมูลมาไม่ครบค่ะ

Posted: 08/07/2014 12:44 pm
by buay

Code: Select all

$arr = array('001','003','014','015');
$sql =  "SELECT DAYIN FROM WDATA 
        WHERE dayin  BETWEEN  ".set_f_date($sql_m_b)."  
        AND  ".set_f_date($sql_m_e)." 
        AND PRODUCT IN ('001','003','014','015')
        GROUP BY DAYIN 
        ORDER BY DAYIN ASC ";
$rows    =    $dbf_db->GetAll($sql);
        foreach($rows as $k=>$v) { 
            for($i=0;$i<count($arr);$i++){
                $product = $arr[$i];            
                if($product=='001'){
                     $sql    =    "SELECT SUM((W1-W2)/1000) FROM wdata 
                                     WHERE PRODUCT='001' AND DAYIN=".set_f_date($v[0])." ";
                     $row    =    $dbf_db->getRow($sql);
                     $sum1        =    $row[0];
                     $total_1[]    =    $sum1;             
                     print_r($row);
                }
        }
เมื่อ select ข้อมูลมา 1 รหัส ข้อมูลมาครบ (28 คอลัม)
8-7-2557 12-40-54.png
8-7-2557 12-40-54.png (33.84 KiB) Viewed 870 times
แต่ถ้า select ข้อมูลมา 2 รหัส ข้อมูลมาไม่ครบ หายไป 6 คอลัมค่ะ ต้องทำยังไงคะ

Code: Select all

$arr = array('001','003','014','015');
$sql =  "SELECT DAYIN FROM WDATA 
        WHERE dayin  BETWEEN  ".set_f_date($sql_m_b)."  
        AND  ".set_f_date($sql_m_e)." 
        AND PRODUCT IN ('001','003','014','015')
        GROUP BY DAYIN 
        ORDER BY DAYIN ASC ";
$rows    =    $dbf_db->GetAll($sql);
        foreach($rows as $k=>$v) { 
            for($i=0;$i<count($arr);$i++){
                $product = $arr[$i];            
                if($product=='001'){
                     $sql    =    "SELECT SUM((W1-W2)/1000) FROM wdata 
                                     WHERE PRODUCT='001' AND DAYIN=".set_f_date($v[0])." ";
                     $row    =    $dbf_db->getRow($sql);
                     $sum1        =    $row[0];
                     $total_1[]    =    $sum1;             
                     print_r($row);
                }else if($product=='003'){
                     $sql    =    "SELECT SUM((W1-W2)/1000) FROM wdata 
                                     WHERE PRODUCT='003' AND DAYIN=".set_f_date($v[0])." ";
                     $row    =    $dbf_db->getRow($sql);
                     $sum2        =    $row[0];
                     $total_2[]    =    $sum2;
                     print_r($row);
             }
        }
 
8-7-2557 12-38-58.png
8-7-2557 12-38-58.png (48.11 KiB) Viewed 870 times

Re: ใช้ loop foreach แล้วข้อมูลมาไม่ครบค่ะ

Posted: 08/07/2014 12:50 pm
by mindphp
https://www.mindphp.com/forums/viewtopic ... 861#p47861

$product = $arr[$i];
เอาไว้ทำอะไร

getRow() ได้ row มา ไม่เกี่ยวกับ columns

Re: ใช้ loop foreach แล้วข้อมูลมาไม่ครบค่ะ

Posted: 08/07/2014 2:22 pm
by rangsun6342
buay wrote:

Code: Select all

$arr = array('001','003','014','015');
$sql =  "SELECT DAYIN FROM WDATA 
        WHERE dayin  BETWEEN  ".set_f_date($sql_m_b)."  
        AND  ".set_f_date($sql_m_e)." 
        AND PRODUCT IN ('001','003','014','015')
        GROUP BY DAYIN 
        ORDER BY DAYIN ASC ";
$rows    =    $dbf_db->GetAll($sql);
        foreach($rows as $k=>$v) { 
            for($i=0;$i<count($arr);$i++){
                $product = $arr[$i];            
                if($product=='001'){
                     $sql    =    "SELECT SUM((W1-W2)/1000) FROM wdata 
                                     WHERE PRODUCT='001' AND DAYIN=".set_f_date($v[0])." ";
                     $row    =    $dbf_db->getRow($sql);
                     $sum1        =    $row[0];
                     $total_1[]    =    $sum1;             
                     print_r($row);
                }
        }
เมื่อ select ข้อมูลมา 1 รหัส ข้อมูลมาครบ (28 คอลัม)
8-7-2557 12-40-54.png
แต่ถ้า select ข้อมูลมา 2 รหัส ข้อมูลมาไม่ครบ หายไป 6 คอลัมค่ะ ต้องทำยังไงคะ

Code: Select all

$arr = array('001','003','014','015');
$sql =  "SELECT DAYIN FROM WDATA 
        WHERE dayin  BETWEEN  ".set_f_date($sql_m_b)."  
        AND  ".set_f_date($sql_m_e)." 
        AND PRODUCT IN ('001','003','014','015')
        GROUP BY DAYIN 
        ORDER BY DAYIN ASC ";
$rows    =    $dbf_db->GetAll($sql);
        foreach($rows as $k=>$v) { 
            for($i=0;$i<count($arr);$i++){
                $product = $arr[$i];            
                if($product=='001'){
                     $sql    =    "SELECT SUM((W1-W2)/1000) FROM wdata 
                                     WHERE PRODUCT='001' AND DAYIN=".set_f_date($v[0])." ";
                     $row    =    $dbf_db->getRow($sql);
                     $sum1        =    $row[0];
                     $total_1[]    =    $sum1;             
                     print_r($row);
                }else if($product=='003'){
                     $sql    =    "SELECT SUM((W1-W2)/1000) FROM wdata 
                                     WHERE PRODUCT='003' AND DAYIN=".set_f_date($v[0])." ";
                     $row    =    $dbf_db->getRow($sql);
                     $sum2        =    $row[0];
                     $total_2[]    =    $sum2;
                     print_r($row);
             }
        }
 
8-7-2557 12-38-58.png

ลองแบบนี้ดูครับ

$sql = "SELECT DAYIN FROM WDATA
WHERE dayin BETWEEN ".set_f_date($sql_m_b)."
AND ".set_f_date($sql_m_e)."
AND PRODUCT IN ('001','003','014','015')
GROUP BY DAYIN
ORDER BY DAYIN ASC ";
$rows = $dbf_db->GetAll($sql);

$stack = array();

foreach($rows as $k=>$v) {

array_push($stack ,$v[0]);

}

foreach( $stack as $d ) {

$sql = "SELECT SUM((W1-W2)/1000) FROM wdata
WHERE PRODUCT='001' AND DAYIN=".set_f_date($d)." ";
$row = $dbf_db->getRow($sql);
$sum1 = $row[$d];
$total_1[] = $sum1;

}

Re: ใช้ loop foreach แล้วข้อมูลมาไม่ครบค่ะ

Posted: 08/07/2014 3:46 pm
by buay

Code: Select all

$a_product = array('001','003','014','015');
foreach($rows as $k=>$v) {     
    foreach($a_product as $r=>$d) {
         $sql    = "SELECT SUM((W1-W2)/1000) FROM wdata 
                   WHERE PRODUCT='".$d."' AND DAYIN=".set_f_date($v[0])." ";
         $row    = $dbf_db->getRow($sql);  
         $sum[$d]  = $row[0];       
         print_r($row);         
    }
}
 
ถ้านำรหัสมาวนแบบ array (ทั้งหมด 4 รหัส)ข้อมูลมาไม่ครบ แต่ถ้าวนแค่ 1 รหัส ข้อมูลถึงจะมาครบ เป็นเพราะอะไรคะ

Re: ใช้ loop foreach แล้วข้อมูลมาไม่ครบค่ะ

Posted: 08/07/2014 4:17 pm
by mindphp
ไม่ครบ คืออะไร ครับ query มาแค่ field เดียว
อะไร มันหายไป

Re: ใช้ loop foreach แล้วข้อมูลมาไม่ครบค่ะ

Posted: 08/07/2014 4:29 pm
by buay
ถ้าวนแค่ 1 รหัส ข้อมูลจะมาตั้งแต่วันที่ 1-31 แต่ถ้าวน 4 รหัส ข้อมูลจะมาวันที่ 1-14 ค่ะ

Re: ใช้ loop foreach แล้วข้อมูลมาไม่ครบค่ะ

Posted: 08/07/2014 6:20 pm
by buay

Code: Select all

$sql =  "SELECT DAYIN FROM WDATA 
    WHERE dayin  BETWEEN  ".set_f_date($sql_m_b)."  
        AND  ".set_f_date($sql_m_e)." 
    AND PRODUCT IN ('001','003','014','015')
        GROUP BY DAYIN 
    ORDER BY DAYIN ASC ";
$rows =    $dbf_db->GetAll($sql);
 
echo $sql; ออกมาได้ SELECT DAYIN FROM WDATA WHERE dayin BETWEEN #08/01/06# AND #08/31/06# AND PRODUCT IN ('001','003','014','015') GROUP BY DAYIN ORDER BY DAYIN ASC 2006-08-01

นำ $rows มาวน loop เป็น array ตามรหัส

Code: Select all

$a_product = array('001','003','014','015');
foreach($rows as $k=>$v) {     
    foreach($a_product as $r=>$d) {
         $sql    = "SELECT SUM((W1-W2)/1000) FROM wdata 
                   WHERE PRODUCT='".$d."' AND DAYIN=".set_f_date($v[0])." ";
         $row    = $dbf_db->getRow($sql);  
   }
}
 
echo $sql; ออกมาได้
SELECT SUM((W1-W2)/1000) FROM wdata WHERE PRODUCT='001' AND DAYIN=#08/01/06#
SELECT SUM((W1-W2)/1000) FROM wdata WHERE PRODUCT='003' AND DAYIN=#08/01/06#
SELECT SUM((W1-W2)/1000) FROM wdata WHERE PRODUCT='014' AND DAYIN=#08/01/06#
SELECT SUM((W1-W2)/1000) FROM wdata WHERE PRODUCT='015' AND DAYIN=#08/01/06#
SELECT SUM((W1-W2)/1000) FROM wdata WHERE PRODUCT='001' AND DAYIN=#08/02/06#
SELECT SUM((W1-W2)/1000) FROM wdata WHERE PRODUCT='003' AND DAYIN=#08/02/06#
SELECT SUM((W1-W2)/1000) FROM wdata WHERE PRODUCT='014' AND DAYIN=#08/02/06#
SELECT SUM((W1-W2)/1000) FROM wdata WHERE PRODUCT='015' AND DAYIN=#08/02/06#
SELECT SUM((W1-W2)/1000) FROM wdata WHERE PRODUCT='001' AND DAYIN=#08/03/06#
SELECT SUM((W1-W2)/1000) FROM wdata WHERE PRODUCT='003' AND DAYIN=#08/03/06#
SELECT SUM((W1-W2)/1000) FROM wdata WHERE PRODUCT='014' AND DAYIN=#08/03/06#
SELECT SUM((W1-W2)/1000) FROM wdata WHERE PRODUCT='015' AND DAYIN=#08/03/06#
SELECT SUM((W1-W2)/1000) FROM wdata WHERE PRODUCT='001' AND DAYIN=#08/04/06#
SELECT SUM((W1-W2)/1000) FROM wdata WHERE PRODUCT='003' AND DAYIN=#08/04/06#
SELECT SUM((W1-W2)/1000) FROM wdata WHERE PRODUCT='014' AND DAYIN=#08/04/06#
SELECT SUM((W1-W2)/1000) FROM wdata WHERE PRODUCT='015' AND DAYIN=#08/04/06#
SELECT SUM((W1-W2)/1000) FROM wdata WHERE PRODUCT='001' AND DAYIN=#08/05/06#
SELECT SUM((W1-W2)/1000) FROM wdata WHERE PRODUCT='003' AND DAYIN=#08/05/06#
SELECT SUM((W1-W2)/1000) FROM wdata WHERE PRODUCT='014' AND DAYIN=#08/05/06#
SELECT SUM((W1-W2)/1000) FROM wdata WHERE PRODUCT='015' AND DAYIN=#08/05/06#
SELECT SUM((W1-W2)/1000) FROM wdata WHERE PRODUCT='001' AND DAYIN=#08/07/06#
SELECT SUM((W1-W2)/1000) FROM wdata WHERE PRODUCT='003' AND DAYIN=#08/07/06#
SELECT SUM((W1-W2)/1000) FROM wdata WHERE PRODUCT='014' AND DAYIN=#08/07/06#
SELECT SUM((W1-W2)/1000) FROM wdata WHERE PRODUCT='015' AND DAYIN=#08/07/06#
SELECT SUM((W1-W2)/1000) FROM wdata WHERE PRODUCT='001' AND DAYIN=#08/08/06#
SELECT SUM((W1-W2)/1000) FROM wdata WHERE PRODUCT='003' AND DAYIN=#08/08/06#
SELECT SUM((W1-W2)/1000) FROM wdata WHERE PRODUCT='014' AND DAYIN=#08/08/06#
SELECT SUM((W1-W2)/1000) FROM wdata WHERE PRODUCT='015' AND DAYIN=#08/08/06#
SELECT SUM((W1-W2)/1000) FROM wdata WHERE PRODUCT='001' AND DAYIN=#08/09/06#
SELECT SUM((W1-W2)/1000) FROM wdata WHERE PRODUCT='003' AND DAYIN=#08/09/06#
SELECT SUM((W1-W2)/1000) FROM wdata WHERE PRODUCT='014' AND DAYIN=#08/09/06#
SELECT SUM((W1-W2)/1000) FROM wdata WHERE PRODUCT='015' AND DAYIN=#08/09/06#
SELECT SUM((W1-W2)/1000) FROM wdata WHERE PRODUCT='001' AND DAYIN=#08/10/06#
SELECT SUM((W1-W2)/1000) FROM wdata WHERE PRODUCT='003' AND DAYIN=#08/10/06#
SELECT SUM((W1-W2)/1000) FROM wdata WHERE PRODUCT='014' AND DAYIN=#08/10/06#
SELECT SUM((W1-W2)/1000) FROM wdata WHERE PRODUCT='015' AND DAYIN=#08/10/06#
SELECT SUM((W1-W2)/1000) FROM wdata WHERE PRODUCT='001' AND DAYIN=#08/11/06#
SELECT SUM((W1-W2)/1000) FROM wdata WHERE PRODUCT='003' AND DAYIN=#08/11/06#
SELECT SUM((W1-W2)/1000) FROM wdata WHERE PRODUCT='014' AND DAYIN=#08/11/06#
SELECT SUM((W1-W2)/1000) FROM wdata WHERE PRODUCT='015' AND DAYIN=#08/11/06#
SELECT SUM((W1-W2)/1000) FROM wdata WHERE PRODUCT='001' AND DAYIN=#08/12/06#
SELECT SUM((W1-W2)/1000) FROM wdata WHERE PRODUCT='003' AND DAYIN=#08/12/06#
SELECT SUM((W1-W2)/1000) FROM wdata WHERE PRODUCT='014' AND DAYIN=#08/12/06#
ข้อมูลมีถึงวันที่ 12

แต่ถ้าลองวน loop แค่รหัส 001

Code: Select all

foreach($rows as $k=>$v) {     
         $sql    = "SELECT SUM((W1-W2)/1000) FROM wdata 
                   WHERE PRODUCT='001' AND DAYIN=".set_f_date($v[0])." ";
         $row    = $dbf_db->getRow($sql);  
}
 
echo $sql; ออกมาได้
SELECT SUM((W1-W2)/1000) FROM wdata WHERE PRODUCT='001' AND DAYIN=#08/01/06#
SELECT SUM((W1-W2)/1000) FROM wdata WHERE PRODUCT='001' AND DAYIN=#08/02/06#
SELECT SUM((W1-W2)/1000) FROM wdata WHERE PRODUCT='001' AND DAYIN=#08/03/06#
SELECT SUM((W1-W2)/1000) FROM wdata WHERE PRODUCT='001' AND DAYIN=#08/04/06#
SELECT SUM((W1-W2)/1000) FROM wdata WHERE PRODUCT='001' AND DAYIN=#08/05/06#
SELECT SUM((W1-W2)/1000) FROM wdata WHERE PRODUCT='001' AND DAYIN=#08/07/06#
SELECT SUM((W1-W2)/1000) FROM wdata WHERE PRODUCT='001' AND DAYIN=#08/08/06#
SELECT SUM((W1-W2)/1000) FROM wdata WHERE PRODUCT='001' AND DAYIN=#08/09/06#
SELECT SUM((W1-W2)/1000) FROM wdata WHERE PRODUCT='001' AND DAYIN=#08/10/06#
SELECT SUM((W1-W2)/1000) FROM wdata WHERE PRODUCT='001' AND DAYIN=#08/11/06#
SELECT SUM((W1-W2)/1000) FROM wdata WHERE PRODUCT='001' AND DAYIN=#08/12/06#
SELECT SUM((W1-W2)/1000) FROM wdata WHERE PRODUCT='001' AND DAYIN=#08/14/06#
SELECT SUM((W1-W2)/1000) FROM wdata WHERE PRODUCT='001' AND DAYIN=#08/15/06#
SELECT SUM((W1-W2)/1000) FROM wdata WHERE PRODUCT='001' AND DAYIN=#08/16/06#
SELECT SUM((W1-W2)/1000) FROM wdata WHERE PRODUCT='001' AND DAYIN=#08/17/06#
SELECT SUM((W1-W2)/1000) FROM wdata WHERE PRODUCT='001' AND DAYIN=#08/18/06#
SELECT SUM((W1-W2)/1000) FROM wdata WHERE PRODUCT='001' AND DAYIN=#08/19/06#
SELECT SUM((W1-W2)/1000) FROM wdata WHERE PRODUCT='001' AND DAYIN=#08/20/06#
SELECT SUM((W1-W2)/1000) FROM wdata WHERE PRODUCT='001' AND DAYIN=#08/21/06#
SELECT SUM((W1-W2)/1000) FROM wdata WHERE PRODUCT='001' AND DAYIN=#08/22/06#
SELECT SUM((W1-W2)/1000) FROM wdata WHERE PRODUCT='001' AND DAYIN=#08/23/06#
SELECT SUM((W1-W2)/1000) FROM wdata WHERE PRODUCT='001' AND DAYIN=#08/24/06#
SELECT SUM((W1-W2)/1000) FROM wdata WHERE PRODUCT='001' AND DAYIN=#08/25/06#
SELECT SUM((W1-W2)/1000) FROM wdata WHERE PRODUCT='001' AND DAYIN=#08/26/06#
SELECT SUM((W1-W2)/1000) FROM wdata WHERE PRODUCT='001' AND DAYIN=#08/28/06#
SELECT SUM((W1-W2)/1000) FROM wdata WHERE PRODUCT='001' AND DAYIN=#08/29/06#
SELECT SUM((W1-W2)/1000) FROM wdata WHERE PRODUCT='001' AND DAYIN=#08/30/06#
SELECT SUM((W1-W2)/1000) FROM wdata WHERE PRODUCT='001' AND DAYIN=#08/31/06#
ได้ข้อมูลถึงวันที่ 31

** จะทำยังไงให้วน loop แบบ array แล้วให้แสดงข้อมูลถึงวันที่ 31 คะ

Re: ใช้ loop foreach แล้วข้อมูลมาไม่ครบค่ะ

Posted: 08/07/2014 6:43 pm
by buay
ทำได้แล้วค่ะ เอา loop รหัสสินค้าไว้ข้างบน

Code: Select all

$a_product = array('001','003','014','015');
foreach($a_product as $r=>$d) {    
$sql =  "SELECT DAYIN FROM WDATA 
        WHERE dayin  BETWEEN  ".set_f_date($sql_m_b)."  
        AND  ".set_f_date($sql_m_e)." 
        AND PRODUCT = '".$d."'
        GROUP BY DAYIN 
        ORDER BY DAYIN ASC ";
$rows =    $dbf_db->GetAll($sql);
echo count($rows);
foreach($rows as $k=>$v) {     
    
         $sql    = "SELECT SUM((W1-W2)/1000) FROM wdata 
                   WHERE PRODUCT='".$d."' AND DAYIN=".set_f_date($v[0])." ";

         echo "<br>";print_r($sql);
         $row    = $dbf_db->getRow($sql);  
         $sum[$d] = $row[0];
    }
}