มีตารางอยู่ สองตาราง อยากรู้ว่าจะทำไงให้ได้ค่าตามที่เราต้องการอะ ครับ
ใช้ while 3 ชั้นครับ
select ตารางแรก Group by std id //เพื่อหาId เด็กทั้งหมดว่ามีใครโดนตัดคะแนนบ้าง เพราะหนึ่งคนอาจโดนตัดมากกว่าหนึ่งรายการจะทำการประมวลผลเลยไม่ได้
Numrows1 จำนวนคนที่โดนตัดคะแนน
I1=0
While(i1<numrows1) {
$stdid=flech array ค่าของ stdid
Select ตารางแรก where stdid=stdid
Numrows2 จำนวนครั้งที่ นร คนนั้นโดนตัด
I2=0
While (i2<numrows2) {
Tb_rune_id = flech array ค่าของ rune id
Select ตาราง2 where Tb_rune_idที่ flech มา = Tb_rune_id
Point =Flech array ค่าคะแนนที่โดนตัด
Echo Sum+=point //เก็บค่าที่โดนตัด
I2++} // ปิด while2 เมื่อวนครบรอบคะได้คะแนนรวมของ นร หนึ่งคน
I1++} // ปิด while ตัวแรกเมื่อครบรอบจะได้คะแนนที่โดนตัดของ นักเรียนทั้งหมด แยกย่อยเป็นรายคน
Date :
2013-08-17 04:34:09
By :
Imghost
Group by แล้ว Sum ค่าก็น่าจะได้นะครับ join table
Date :
2013-08-17 08:58:03
By :
somparn
อ่าสวัสดีครับผมคือ คห2
วิธีแก้ใขไม่ให้ค่ามันเพิ่มขึ้นเรื่อย ประกาศ sumpoint = 0 ไว้ก่อนบรรทัด while ครั้งที่สองครับผม
Date :
2013-08-17 11:26:07
By :
Imghost
ดูตามรูปแบบการออกแบบฐานข้อมูลแล้ว คิวรี่เรียง point มากไปน้อยไม่ได้ครับผม. . . แต่ไม่ไช่ว่าจะไม่มีทางต้องเก็บตัวแปร sumpoint ไว้ในรูปแบบอาเรย์และเก็บตัวแปรรหัสนักเรียนไว้ในอาเรยืทำเป็นคู่ขนานกันและนำไปเปรียบเทียบกัน และคิวรี่ใหม่อีกรอบ โดยให้รหัสนักเรียนที่รวมคะแนนไว้แล้วอันไหนมากกว่าเข้าก่อน ถึงจะใช้ ORDER BY stu_id ซึ่งคิดว่ามันจะยุ่งยากมากครับ
Date :
2013-08-17 11:53:56
By :
ImGhost
while ซ้อน while แบบนี้ ถ้ามิวิธี อื่นที่ดีกว่าควรทำอย่างอื่นก่อนครับ Group by :: sum ::: Join
เช่น
Code (PHP)
$query_all = $db->query("SELECT ti.*,tr.*, SUM(tr.tb_ruletype_score) AS scoresum FROM tb_studen_id ti LEFT JOIN tb_rule tr ON (ti.tb_ruletype_id = tr.tb_ruletype_id GROUP BY tb_studen_id DESC)");
ลองดูครับ ตัวแปรอาจผิดไปบ้าง เช็คดูเองนะครับ ทำตาม Rep.3,Rep.4
Date :
2013-08-17 13:40:51
By :
teez1232002
ti , tr ย่อมาจาก ชื่อตารางครับ ดูตามโค๊ดเลย
Date :
2013-08-20 14:09:11
By :
teez1232002
Load balance : Server 02