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

สำหรับผู้ที่ เริ่มต้น Programming - PHP มีอะไร แนะนำ หรือข้อสงสัยต้องบอร์ด นี้ คนที่มีความรู้ แบ่งปันคนอื่นบ้างนะ ปัญหาการเขียนโปรแกรม แบบ OOP Session Cookies php network

Moderators: mindphp, ผู้ดูแลกระดาน

buay
PHP Super Member
PHP Super Member
Posts: 250
Joined: 02/06/2014 9:55 am

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

Post 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 869 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 869 times

User avatar
mindphp
ผู้ดูแลระบบ MindPHP
ผู้ดูแลระบบ MindPHP
Posts: 24185
Joined: 22/09/2008 6:18 pm
Contact:

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

Post by mindphp »

https://www.mindphp.com/forums/viewtopic ... 861#p47861

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

getRow() ได้ row มา ไม่เกี่ยวกับ columns
ติดตาม VDO: http://www.youtube.com/c/MindphpVideoman
ติดตาม FB: https://www.facebook.com/pages/MindphpC ... 9517401606
หมวดแชร์ความรู้: https://www.mindphp.com/forums/viewforum.php?f=29
รับอบรม และพัฒนาระบบ: https://www.mindphp.com/forums/viewtopic.php?f=6&t=2042

rangsun6342

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

Post 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;

}

buay
PHP Super Member
PHP Super Member
Posts: 250
Joined: 02/06/2014 9:55 am

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

Post 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 รหัส ข้อมูลถึงจะมาครบ เป็นเพราะอะไรคะ

User avatar
mindphp
ผู้ดูแลระบบ MindPHP
ผู้ดูแลระบบ MindPHP
Posts: 24185
Joined: 22/09/2008 6:18 pm
Contact:

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

Post by mindphp »

ไม่ครบ คืออะไร ครับ query มาแค่ field เดียว
อะไร มันหายไป
ติดตาม VDO: http://www.youtube.com/c/MindphpVideoman
ติดตาม FB: https://www.facebook.com/pages/MindphpC ... 9517401606
หมวดแชร์ความรู้: https://www.mindphp.com/forums/viewforum.php?f=29
รับอบรม และพัฒนาระบบ: https://www.mindphp.com/forums/viewtopic.php?f=6&t=2042

buay
PHP Super Member
PHP Super Member
Posts: 250
Joined: 02/06/2014 9:55 am

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

Post by buay »

ถ้าวนแค่ 1 รหัส ข้อมูลจะมาตั้งแต่วันที่ 1-31 แต่ถ้าวน 4 รหัส ข้อมูลจะมาวันที่ 1-14 ค่ะ

buay
PHP Super Member
PHP Super Member
Posts: 250
Joined: 02/06/2014 9:55 am

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

Post 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 คะ

buay
PHP Super Member
PHP Super Member
Posts: 250
Joined: 02/06/2014 9:55 am

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

Post 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];
    }
}
 

Post Reply
  • Similar Topics
    Replies
    Views
    Last post

Return to “Programming - PHP”

Who is online

Users browsing this forum: No registered users and 12 guests