ประมาณนี้อ่ะครับ

ขอคำแนะนำ การ ดึงข้อมูล รวมถึงการแสดงผล ครับ

ขอบคุณมากครับ
กรกฎ วิริยะ 10 ส.ค. 2553 14:28
ข้อมูลมีน้อยนิด...

ให้ query ข้อมูลออกมาก่อนแล้วใส่เอาไว้ใน array จากนั้นค่อยนำ array ไปจัดการแสดงผล

1 query ข้อมูลที่เป็นหัวข้อออกมาก่อน เช่น analyst, cleark เอาใส่ array ไว้
2. วนลูป array ที่ได้ ซึ่งจะเป็นข้อมูลในแนวตั้ง
3. ภายในลูป query ข้อมูล DEPT10, DEPT20.... ออกมาแสดงผลทีละรายการตามหัวข้อที่ต้องการ

แนวคิดหลักๆ คือ คงต้องประยุกต์ใช้ Array ครับ 
Pariwat Tokasaem 10 ส.ค. 2553 22:34

ครับ แก้ไข ตามที่แนะนำแล้วครับ

ได้ผลเป็นที่น่าพอใจแล้วครับ
ขอบพระคุณมากครับ

*-*

Pariwat Tokasaem 15 ก.ย. 2562 19:55
<p>ขอบคุณสำหรับคำแนะนำครับ คือตอนนี้ผมก็ใช้ array อยู่ครับ แต่ มันติดปัญหา อยู่นิดนึ่งครับ เหมือนกับว่า ข้อมูลที่ได้ไม่เป็นไปตามความจริงนะครับ <a target="_blank" href="http://www.thefamilyhotel.com/upimage/dat/5267d00c697cdbc7.png">คลิกดูภาพประกอบ</a> <? $host = "localhost"; //ชื่อ database server $user = "root"; //ชื่อผู้ใช้ databse ที่มีสิทธิ์ $pass = "xxxxxxxxxx"; //รหัสผ่าน $dbase = "db_xxxxxxxxxx"; //ชื่อฐานข้อมูลที่จะใช้</p> <p>$link = mysql_connect($host,$user,$pass) or die("Connect error : ".mysql_error()); mysql_select_db($dbase); ?> <? $sql = "SELECT DISTINCT(tb_hazard.haz_id),tb_hazard.haz_name FROM tb_hazard, tb_ass_act WHERE ( tb_ass_act.haz_id = tb_hazard.haz_id )AND( tb_ass_act.dep_id = '15')ORDER BY tb_hazard.haz_id"; //selec ข้อมูลสำหรับแสดงผลเป็นหัวตาราง กำหนด ค่า ให้ หาเฉพาะแผนก หมายเลข 15 $rsItem = mysql_query($sql) or die("Select error : ".mysql_error()); //สร้าง result set $item_id = array(); $item = array(); $i = 0; while($value = mysql_fetch_assoc($rsItem)){ //วนลูปดึงข้อมูลเก็บเข้า array $item_id[$i] = $value['haz_id']; //เก็บ id สำหรับกำหนดเงื่อนไขในการวนลูปแนวกว้าง $item[$i] = $value['haz_name']; //เก็บตัวแปร item สำหรับแสดงผลหัว column $i ++; } mysql_free_result($rsItem); //สั่งคืนค่าหน่วยความจำเพราะ $rsTopic ไม่มีการใช้งานอีกแล้ว</p> <p>$sql = "SELECT DISTINCT(tb_activity.act_id),tb_activity.act_code FROM tb_activity,tb_ass_act where ( tb_activity.act_id = tb_ass_act.act_id ) AND (tb_ass_act.dep_id='15' ) ORDER BY tb_activity.act_id"; $rsValue = mysql_query($sql) or die("Select error : ".mysql_error());// SELECT ข้อมูล id,name จากตาราง tb_value โดยมีการตรวจสอบกับตาราง tb_area ซึ่งเป็น lookup table $num_rows = mysql_num_rows($rsValue);//นับจำนวนแถวว่ามีข้อมูลหรือไม่ ?></p> <p><html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>XXXXXXX</title> </head> <body> <? if($num_rows>0){//ถ้ามีก็ให้แสดงผลตารางข้อมูล ?> <table width="350" border="0" bgcolor="#000000"> <tr bgcolor="#FFFFFF"> <td align="center"><strong>พื้นที่</strong></td> <? for($i=0;$i<count($item_id);$i++){ ?> <td align="center"><strong><?=$item[$i]//แสดงผลหัวคอลัมน์?></strong></td> <? } ?> </tr> <? while($ListValue = mysql_fetch_assoc($rsValue)){//วนลูปแสดงผลข้อมูลมิติที่ 1 ตามแนวตั้ง /แถว ?> <tr bgcolor="#FFFFFF"> <td align="left"> <?=$ListValue['act_code']//แสดงผลชื่อพื้นที่?></td> <? /*วนลูปแสดงผลข้อมูลมิติที่ 2 ตามแนวขวาง /คอลัมน์*/ for($i=0;$i<count($item_id);$i++){ //วนลูปให้เท่ากับจำนวน item $sql = "SELECT tb_ass_act.haz_id,tb_ass_act.act_id FROM tb_ass_act WHERE tb_ass_act.act_id={$ListValue['act_id']} AND tb_ass_act.haz_id={$item_id[$i]}";//วนลูปหาค่าในแต่ละเชลล์ของตารางตามค่าในคีย์หลักของแถว และ คอลัมน์ $rsColValue = mysql_query($sql) or die("Select error : ".mysql_error()); $ColValue = mysql_fetch_assoc($rsColValue); //แน่ใจว่าในแต่ละเชลล์มีค่าเดียว จึงไม่ต้อวนลูป ทำ mysql_fetch_assoc เพราะถึงแม้วนลูปค่าที่ได้ก็จะมีแค่ค่าเดียวเหมือนกัน ?> <td align="center"><?php if(number_format($ColValue['haz_id']==true)){ echo $ColValue['act_id'];}else{echo $ColValue['act_id'];} ?></td> <? mysql_free_result($rsColValue); //คืนค่าเมื่อไม่ได้ใช้แล้ว }//end for }//end while mysql_free_result($rsValue); //คืนค่าหน่วยความจำ ?> </tr> </table> <? } else{ echo "<p align=\"center\"><strong>ไม่มีข้อมูล</strong></p>"; } ?></p> <p> </p> <p></body> </html> <? mysql_close($link); //ปิดการติดต่อฐานข้อมูล ?> Code ที่ผมใช้ แล้ว มันแสดง ตามรูป ซึ้ง ใน ช่อง <strong>Engine and turbine exhaust มีข้อมูล แต่ดัน ไม่ทำเครื่องหมาย X </strong>พอจะแนะนำตรงไหนได้มั่งไหมครับ ขอบพระคุณสำหรับความช่วยเหลือครับ</p>
กรกฎ วิริยะ 15 ก.ย. 2562 19:55
ปัญหาคือ ไม่รู้ทั้งโครงสร้างฐานข้อมูล ข้อมูล และ ค่ากำหนดต่างๆที่มันควรจะเป็น คำแนะนำ.. $rsValue น่าจะผิด ใน query ครั้งที่ 2 หลักการที่ควรจะเป็น ครั้งที่ 1 ถูกแล้ว คือ query ข้อมูลแนวตั้งออกมาก่อน ใส่ลงใน array เลย หลังจากนั้น ให้ไปวนลูปทันที คำแนะนำที่ควรจะเป็นก็คือ ให้ใช้ array หลายมิติในการจัดการข้อมูล มากกว่าใช้ array หลายตัวเพื่อจัดการข้อมูล เช่น <?php   $tb_hazards[$value['haz_id']] = $value['haz_name']; ?> เหตุผลก็เพื่อให้การจัดการและมองโค้ดได้ง่ายขึ้น และ สามารถป้องกัน id ซ้ำกันได้ด้วย เวลาวนลูปให้ใช้ foreach <?php   foreach($hazards AS $haz_id => $haz_name) {     // do some thing   } ?> ซึ่งแน่นอนจะทำให้การพิจารณาโค้ดง่ายขึ้น เนื่องจากสามารถสังเกตุชื่อตัวแปรได้โดยตรง และเป็นการรับประกันว่าข้อมูลจะตรงกันแน่นอน ภายใน loop จะ query เอาข้อมูลในแนวนอน ของ id ของแถวนั้นออกมาทั้งแถว แล้วค่อยหาความสัมพันธ์เพื่อจัดการแสดงผล ปัญหาคือตรงนี้ไม่รู้จะแนะนำยังไงเนื่องจากไม่รู้วิธีการจัดเก็บข้อมูล และ ความเป็นไปได้ของข้อมูล ในความเป็นจริง เราสามารถ query ข้อมูลออกมาทั้งหมดได้ภายในครั้งเดียว ด้วยการ JOIN ตาราง หากจำนวนคอลัมน์มีค่าแน่นอน และ การออกแบบตารางได้ดีพอ เช่น SELECT id,topic FROM maintable AS main INNER JOIN col1table AS col1 ON col1.main_id = main.id INNER JOIN col2table AS col2 ON col2.main_id = main.id ....... INNER JOIN colntable AS coln ON coln.main_id = main.id มันมีหลายวิธีครับ ความยากง่ายขึ้นอยู่กับการออกแบบฐานข้อมูลและวิธีจัดเก็บด้วย