 |
ช่วยแก้ไขคำสั่ง query array กรณีมีการเทียบข้อมูลระหว่างกันหน่อยครับ |
|
 |
|
|
 |
 |
|
ภาพ ฐานข้อมูล

ภาพตารางแบบฟอร์มข้อมูลที่ต้องการ

จาก code เป็นการเก็บจำนวนเดือน เพื่อ เอามาเทียบว่า ในเดือนนี้ มีข้อมูลระดับ A ทั้งหมดกี่จำนวน ระดับ B มีกี่จำนวน C,D,E,F ตามลำดับ
ในส่วนของการ query ของเดือน ข้อมูลออกแล้ว ครับ ว่าเดือนนี้ มีข้อมูลทั้งหมดเท่าไหร่ แต่ ในส่วนของระดับยังไม่ออก รบกวนหน่อยนะครับ
Code (PHP)
$year = $_POST['year'];
$month=array("1","2","3","4","5","6","7","8","9","10","11","12");
$level = array("A","B","C","D","E","F","G","H","I");
for ($i=0; $i < 12; $i++) {
$sql = "SELECT COUNT(date_in) AS dataDate, COUNT(level) AS dataLevel, COUNT(sect) AS dataSect ";
$sql .= "FROM tb_rm_manage ";
$sql .= "WHERE YEAR(date_in) = '$year' AND MONTH(date_in) = $month[$i] ";
$query = mysql_query($sql) or die(mysql_error());
$result = mysql_fetch_assoc($query);
}
Tag : PHP, MySQL, HTML/CSS
|
|
 |
 |
 |
 |
Date :
2016-04-13 16:01:16 |
By :
san.saleah |
View :
1297 |
Reply :
5 |
|
 |
 |
 |
 |
|
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
Code (SQL)
select
level,
sum(month(date_in)=1) as m1,
sum(month(date_in)=2) as m2,
sum(month(date_in)=3) as m3,
...
sum(month(date_in)=12) as m12
FROM tb_rm_manage
where year(date_in)=$year
group by level
แสดงระดับ ในแต่ละเดือน
|
 |
 |
 |
 |
Date :
2016-04-13 19:27:31 |
By :
Chaidhanan |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ตัวอย่าง นั้นจะได้
rec 1 level A จำนวนคนเดือน 1 จำนวนคนเดือน 2 .... 12
rec 2 level B จำนวนคนเดือน 1 จำนวนคนเดือน 2 .... 12
rec 3 level C จำนวนคนเดือน 1 จำนวนคนเดือน 2 .... 12
....
....
(month(date_in)=1 ถ้าเป็นจริง จะได้ค่า 1 เป็นเท็จจะได้ค่า 0) นำมาบวก sum() กันทุกเรคคอร์ด
(month(date_in)=2 ถ้าเป็นจริง จะได้ค่า 1 เป็นเท็จจะได้ค่า 0) นำมาบวก sum() กันทุกเรคคอร์ด
(month(date_in)=3 ถ้าเป็นจริง จะได้ค่า 1 เป็นเท็จจะได้ค่า 0) นำมาบวก sum() กันทุกเรคคอร์ด
ตัวอย่างทดสอบCode (SQL)
select lv, sum(x=1) s1, sum(x=2) s2, sum(x=3) s3
from (
select 'a' as lv, 1 as x union all
select 'a' , 2 union all
select 'b' , 1 union all
select 'b' , 2 union all
select 'b' , 1 union all
select 'a' , 2 union all
select 'b' , 2
) tb group by lv
|
 |
 |
 |
 |
Date :
2016-04-14 02:38:20 |
By :
Chaidhanan |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ตอบความคิดเห็นที่ : 3 เขียนโดย : Chaidhanan เมื่อวันที่ 2016-04-14 02:38:20
รายละเอียดของการตอบ ::
อาจารย์ครับ code ตัวอย่างแรกที่อาจารย์ได้นำเสนอมานั้น ผมได้นำมาทดลอง ใน loop for ดังนี้ (ต่อจาก code เดิมของผม)
Code (PHP)
for ($i=0; $i < 12; $i++) {
$sql2 = "SELECT level, ";
$sql2 .= "SUM(month(date_in)=1) AS m1, ";
$sql2 .= "SUM(month(date_in)=2) AS m2, ";
$sql2 .= "SUM(month(date_in)=3) AS m3, ";
$sql2 .= "SUM(month(date_in)=4) AS m4, ";
$sql2 .= "SUM(month(date_in)=5) AS m5, ";
$sql2 .= "SUM(month(date_in)=6) AS m6, ";
$sql2 .= "SUM(month(date_in)=7) AS m7, ";
$sql2 .= "SUM(month(date_in)=8) AS m8, ";
$sql2 .= "SUM(month(date_in)=9) AS m9, ";
$sql2 .= "SUM(month(date_in)=10) AS m10, ";
$sql2 .= "SUM(month(date_in)=11) AS m11, ";
$sql2 .= "SUM(month(date_in)=12) AS m12 ";
$sql2 .= "FROM tb_rm_manage ";
$sql2 .= "WHERE year(date_in) = '$year' ";
$sql2 .= "GROUP BY level";
$query2 = mysql_query($sql2);
$result2 = mysql_fetch_assoc($query2) or die(mysql_error());
}
echo "<hr>เดือน1 = ".$result2['m1']."<br>";
echo "เดือน2 = ".$result2['m2']."<br>";
echo "เดือน3 = ".$result2['m3']."<br>";
echo "เดือน4 = ".$result2['m4']."<br>";
echo "เดือน5 = ".$result2['m5']."<br>";
ผลลัพธ์ที่ได้ (ระดับ) คือ
เดือน 1 = 0
เดือน 2 = 0
เดือน 3 = 1
เดือน 4 = 2
เดือน 5 = 0
เมื่อผม เข้าไปดูในฐานข้อมูลแล้ว จำนวน เดือน 3 และ 4 นั้น เป็นผลลัพธ์ของระดับ A นะครับ
ปล. code ใหม่ของอาจารย์ผมยังไม่ค่อยเข้าใจครับ
ขอบคุณครับบ
|
ประวัติการแก้ไข 2016-04-14 10:57:47
 |
 |
 |
 |
Date :
2016-04-14 09:48:58 |
By :
san.saleah |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
m1 = ผลลัพธ์ ของ เดือน 1
m2 = ผลลัพธ์ ของ เดือน 2
วิเคราะห์ดูครับว่าควรอยู่ใน loop ไหม
และ result ที่ได้ ไม่ได้มีแค่ record เดียว
และ 1 เรคคอร์ด จะแสดง จำนวนคน ของแต่ละเดือน ของ 1 ระดับเท่านั้น จะเป็น ระดับ A ก็จะเป็น ทั้งเรคคอร์ด
ไม่มีระดับอื่น ปน
ผลลัพธ์ ได้ครบ ขาดแต่การนำมาแสดงผล
ถ้ามองภาพไม่ออก ให้เอาโค๊ด ไปทดลองรันใน phpmyadmin จะได้เห็นว่า result ที่ได้เป็นยังไง
จะได้มา เขียนโค๊ดแสดงผลลัพธ์ตาม result ที่ได้มา
การคิวรี่หลายครั้ง ทำให้ server ทำงานหนักเพิ่มขึ้น และช้า แต่ไม่เปลือง memory
การคิวรี่ครั้งเดียวได้ผลลัพธ์ครบ เร็วแต่เปลือง memory
ก็เลือกเอาครับว่าจะเอา แบบไหน
|
 |
 |
 |
 |
Date :
2016-04-14 12:32:22 |
By :
Chaidhanan |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
|
|