 |
จะ select ข้อมูลอย่างไรให้ได้ข้อมูลแบบนี้ครับ และ ถ้าข้อ size ไม่มีค่าให้เป็น 0 ครับ |
|
 |
|
|
 |
 |
|
เอาไปแปลงเป็น sql เอาเองนะครับ ผมให้แค่แนวคิด
1. เลือกข้อมมูลทั้งหมดจากตาราง tbl_order(ของคุณชื่ออะไรก็ใส่ไป)
2. โดยที่ฟิลด์ gen มีค่าเท่ากับ A และ ฟิลด์ size ไม่มีค่าเท่ากับ 0
3. โดยเรียงตามฟิลด์ date จากน้อยไปหามาก
จบ...
|
 |
 |
 |
 |
Date :
2013-12-17 13:38:38 |
By :
arm8957 |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ขอบ คุณ มาก ได้แล้ว ครับ
<set value='A 2013-05 6'/>
<set value='A 2013-06 2'/>
<set value='A 2013-07 3'/>
แต่ติดปัญหาใหญ่ คือ A ใน เดือน 1,2,3,4 และ 8,9,10,11,12 (ไม่มีข้อมูลอยู่ครับ คือ มี แค่ เดือน 5,6,7) มันเลย select มาแค่นี้
* แต่ที่อยากให้มันโชว์ คือ ให้โชว์ เดือน ทั้ง 12 เดือน แล้ว ก็ เทียบว่า เดือนไหน มี ข้อมูล size ก็เอาค่า sum size นั้นมาใส่ ถ้าไม่มีก็ให้ echo "0" แบบนี้ครับ
รบกวนขอแนว คิด หน่อย ครับ ผมคิดไม่ออกเลย ถ้าไม่มีข้อมูลในฐานข้อมูล แต่ให้วนตาม date
|
 |
 |
 |
 |
Date :
2013-12-17 14:30:39 |
By :
JACK |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
คิดว่าประมาณนี้ ลองดูครับ
Code (PHP)
for($i=1;$i<=12;$i++){
($i<10)? $m = '0'.$i : $m = $i; #หาเดือน
$chkDate = '2013-'.$m; #วันที่เอาไปเช็ค
$sql = mysql_query(" SELECT gen, SUM(size) AS sumSize FROM ตาราง WHERE date = '$chkDate' GROUP BY gen ORDER BY date ASC");
if(mysql_num_rows($sql)>0){
$result = mysql_fetch_assoc($sql);
echo 'Gen = '.$result['gen'].' Date = '.$chkDate.' Sum = '.$result['sumSize'].'<hr>';
} else {
echo 'Gen = '.$result['gen'].' Date = '.$chkDate.' Sum = 0 <hr>';
}
}
|
 |
 |
 |
 |
Date :
2013-12-17 14:51:17 |
By :
arm8957 |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ได้แล้ว ครับ แต่ค่า sum ไม่ตรง ครับ เหมือน วน ค่าเดิม ครับ
Gen = A Date = 2013-01 Sum = 2
Gen = A Date = 2013-02 Sum = 2
Gen = A Date = 2013-03 Sum = 2
Gen = A Date = 2013-04 Sum = 2
Gen = A Date = 2013-05 Sum = 2 // 6
Gen = A Date = 2013-06 Sum = 2 // 2
Gen = A Date = 2013-07 Sum = 2 // 3
Gen = A Date = 2013-08 Sum = 2
Gen = A Date = 2013-09 Sum = 2
Gen = A Date = 2013-10 Sum = 2
Gen = A Date = 2013-11 Sum = 2
Gen = A Date = 2013-12 Sum = 2
Code (PHP)
<?php
for($i=1;$i<=12;$i++){
($i<10)? $m = '0'.$i : $m = $i; #หาเดือน
$chkDate = '2013-'.$m; #วันที่เอาไปเช็ค
$sql = mysql_query("SELECT gen AS gen , SUM(size) AS sumSize
FROM table01
WHERE date = '$chkDate' or gen = 'A'
GROUP BY gen ORDER BY date ASC");
if(mysql_num_rows($sql) > 0){
$result = mysql_fetch_assoc($sql);
if($order_date !=" "){
echo 'Gen = '.$result['gen'].' Date = '.$chkDate.' Sum = '.$result['sumSize'].'<hr>';
} else {
echo 'Gen = '.$result['gen'].' Date = '.$chkDate.' Sum = 0 <hr>';
}
}
}
|
 |
 |
 |
 |
Date :
2013-12-17 15:25:01 |
By :
JACK |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ลองเอา order by ออกครับ และจาก or เป็น and ครับ
และที่สำคัญ ปกติแล้วเค้าจะไม่เอาคำสงวนมาตั้งชื่อฟิลด์นะครับ เปลี่ยน date เป็นอย่างอื่นนะครับ
Code (PHP)
<?php
for($i=1;$i<=12;$i++){
($i<10)? $m = '0'.$i : $m = $i; #หาเดือน
$chkDate = '2013-'.$m; #วันที่เอาไปเช็ค
$sql = mysql_query("SELECT gen, SUM(size) AS sumSize
FROM table01
WHERE date = '$chkDate' AND gen = 'A' ");
if(mysql_num_rows($sql) > 0){
$result = mysql_fetch_assoc($sql);
if($order_date !=" "){
echo 'Gen = '.$result['gen'].' Date = '.$chkDate.' Sum = '.$result['sumSize'].'<hr>';
} else {
echo 'Gen = '.$result['gen'].' Date = '.$chkDate.' Sum = 0 <hr>';
}
}
}
|
ประวัติการแก้ไข 2013-12-17 15:56:01
 |
 |
 |
 |
Date :
2013-12-17 15:54:33 |
By :
arm8957 |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ผมเปลี่ยน date ตามที่พี่บอกแล้วน่ะ ครับ
และ ถ้าเปลี่ยน or เป็น AND ค่า gen ไม่ขึ้น
และ ถ้า ลบ order by ออก ค่า sum ไม่ ขึ้น เช่นกัน ครับ
<?php
for($i=1;$i<=12;$i++){
($i<10)? $m = '0'.$i : $m = $i; #หาเดือน
$chkDate = '2013-'.$m; #วันที่เอาไปเช็ค
$sql = mysql_query("SELECT gen, SUM(size) AS sumSize
FROM table01
WHERE date = '$chkDate' AND gen = 'A' ");
if(mysql_num_rows($sql) > 0){
$result = mysql_fetch_assoc($sql);
if($order_date !=" "){
echo 'Gen = '.$result['gen'].' Date = '.$chkDate.' Sum = '.$result['sumSize'].'<hr>';** มีแนวทางอื่นไหมครับ ที่จะเช็คบรรทัดนี้ โดยเอา ค่า chkDate ที่วนลูปได้ จากข้างบน มา เทียบค่า กับ date บรรทัดนี้ ถ้า ค่าตรงกัน ให้ โชว์ ค่า sumSize //---
} else {
echo 'Gen = '.$result['gen'].' Date = '.$chkDate.' Sum = 0 <hr>';
}
}
}
|
 |
 |
 |
 |
Date :
2013-12-17 16:41:19 |
By :
JACK |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
งมไปงมมาตอนนี้ ข้อมูล ตรง เฉพาะปี 2013 เพราะมี 12 เดือน ส่วน ปี 2012 มี ข้อมูล 2 เดือน ในหนึ่งปี ข้อมูลที่ออกมาไม่ตรงผมเลยคิดว่าน่าจะเป็นที่บรรทัดนี้ เลย อยากขอให้พี่ อธิบายให้เป็นวิทยาทานนิดหนึ่ง ครับ
Code (PHP)
<?php
for($i=1;$i<=12;$i++){
($i<10)? $m = '0'.$i : $m = $i; #หาเดือน // บรรทัดนี้ ครับ อยากรู้ว่า ($i<10)? หมายความว่ายังไง ครับ เพราะ บางปี มี แค่ 2 เดือน ครับ
$chkDate = '2013-'.$m; #วันที่เอาไปเช็ค
|
 |
 |
 |
 |
Date :
2013-12-18 13:39:46 |
By :
JACK |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
Code (PHP)
<?
$ssqq="select DATE_FORMAT( date_, '%2012-%m' ) as dat_
from table01
GROUP BY DATE_FORMAT( order_date, '%2012-%m' ) ";
$qu=mysql_query($ssqq);
while($a=mysql_fetch_array($qu)){
$Mydate_01=$a['dat_ '];
echo $Mydate_01 // ผลลัพธ์ 2012-12 , 2012-11
}
?>
<?php
for($i=1;$i<=2;$i++){ // ถ้าข้อมูล $i<=12 // ให้ 12 เป็น ตัวแปร Mydate_01 ได้รึเปล่าครับ แล้วก็เอา ตัวแปร date_ มาเทียบกับ การ select ข้างล้าง เพราะว่า ข้อมูลใน db จำนวนเดือนไม่เท่ากัน ใน 1 ปี ครับ เช่น ปี 2012 มี เดือน 1 , 2 ปี 2013 มี 1-12 ส่วนปี 2014 มี เดือน 1 , 2 , 3 , 4
($i<10)? $m = '0'.$i : $m = $i; #หาเดือน
$chkDate = '2013-'.$m; #วันที่เอาไปเช็ค
$sql = mysql_query("SELECT gen, SUM(size) AS sumSize
FROM table01
WHERE date = '$chkDate' AND gen = 'A' ");
if(mysql_num_rows($sql) > 0){
$result = mysql_fetch_assoc($sql);
if($order_date !=" "){
echo 'Gen = '.$result['gen'].' Date = '.$chkDate.' Sum = '.$result['sumSize'].'<hr>';
} else {
echo 'Gen = '.$result['gen'].' Date = '.$chkDate.' Sum = 0 <hr>';
}
}
}
?>
|
 |
 |
 |
 |
Date :
2013-12-18 15:05:55 |
By :
JACK |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
|
|