Register Register Member Login Member Login Member Login Forgot Password ??
PHP , ASP , ASP.NET, VB.NET, C#, Java , jQuery , Android , iOS , Windows Phone
 

Registered : 109,027

HOME > PHP > PHP Forum > ถาม เรื่องการดึงข้อมูล เป็น กลุ่มซ้อนกลุ่ม และให้แสดง ค่าอันดับสูงสุด



 

ถาม เรื่องการดึงข้อมูล เป็น กลุ่มซ้อนกลุ่ม และให้แสดง ค่าอันดับสูงสุด

 



Topic : 042117



โพสกระทู้ ( 41 )
บทความ ( 0 )



สถานะออฟไลน์




ถามพี่ เรื่องการดึงข้อมูล เป็น กลุ่มซ้อนกลุ่ม
โจทย์ มีอยู่ดังนี้

รูปตารางครับ


สมมุติ ผมต้องการ ส่งค่า $Code= 'A'
ข้อมูลที่แสดงผล คือ part_ID ทุกตัวที่ อยู่ในกลุ่ม A และ ต้องแสดงค่าที่มี history_Index ที่สูงที่สุดครับ

กรณี$Code= 'B'ครับ


เครื่องมือที่ใช่พัฒนาครับ : PHPmyAdmin

ผมลองหา ตัวอย่างในเว็ป และ search ในgoogle ดู พยายามเขียน โดย ใช้ BY GROUP และ MAX() ช่วย แต่ ก็ได้ผลลัพธ์ไม่เป้นไปตามที่ต้องการเลย

รบกวนพี่ช่วยดู โจทย์ ผมหน่อยครับ ขอบพระคุณครับ



Tag : - - - -







Move To Hilight (Stock) 
Send To Friend.Bookmark.
Date : 2010-04-28 11:36:02 By : thandon View : 1212 Reply : 14
 

 

No. 1



โพสกระทู้ ( 178 )
บทความ ( 0 )



สถานะออฟไลน์


Quote:
ใช้ BY GROUP และ MAX() ช่วย แต่ ก็ได้ผลลัพธ์ไม่เป้นไปตามที่ต้องการเลย


ทำตาม แบบคุณเลยนะครับ ใช้ MAX กะ GROUP BY
Quote:
ให้แต่ล่ะกลุ่มแสดง ค่าอันดับสูงสุด แค่ ข้อมลเดียวครับ


SELECT MAX(Code) AS red FROM ".$table." WHER Code='".$Code."' GROUP BY History_Index
$rs = mysql_fetch_array(mysql_query($sql));

print $rs['red'];

ถึงตรงนี้ ได้ค่าสูงสุด

Quote:
ข้อมูลที่แสดงผล คือ part_ID ทุกตัวที่ อยู่ในกลุ่ม A และ ต้องแสดงค่าที่มี history_Index ที่สูงที่สุดครับ


คิดง่าย ก็

$sql = "SELECT * FROM $table WHERE Code='".$Code."' and History_Index='".$rs['red']."' ";

while >>>>






Date : 2010-04-28 11:53:37 By : kaos
 


 

No. 2



โพสกระทู้ ( 41 )
บทความ ( 0 )



สถานะออฟไลน์


ขอบคุณครับ
Run ไม่ผ่านครับ TTwTT

ถามเรื่อง
Quote:
SELECT MAX(Code) AS red FROM ".$table." WHER Code='".$Code."' GROUP BY History_Index


ถ้าสมมุติผมมีข้อมูลดังนี้ครับ
Code |part_ID | history_Index
A 11111 3
A 11111 2
A 11111 1
A 11110 2
A 11110 1

ถ้า GROUP BY History_Index จะแบ่งอย่างนี้หรือเปล่าครับ
Code part_ID history_Index
A 11111 3 > ดึงA part _ID =11111
-----------------------------------------------------------------
A 11111 2 > ดึงA part _ID =11111
A 11110 2
------------------------------------------------------------------
A 11111 1 > ดึงA part _ID =11111
A 11110 1

แต่ที่ผมต้องการคือ นำ A 11111 (3) กับ A 1110(2) ออกมาครับ
ผมเข้าใจผิดหรือเปล่าครับ
แต่ขอบคุณที่เข้ามาอ่านกันครับ
Date : 2010-04-28 13:31:00 By : thandon
 

 

No. 3



โพสกระทู้ ( 178 )
บทความ ( 0 )



สถานะออฟไลน์


Quote:
ขอบคุณครับ
Run ไม่ผ่านครับ TTwTT

$sql = "SELECT MAX(History_Index) AS red FROM ".$table." WHERE Code='".$Code."' GROUP BY part_ID";

ผมพิมผิด - -"

Quote:
ถ้า GROUP BY History_Index จะแบ่งอย่างนี้หรือเปล่าครับ


จะแสดง ค่าที่ซ้ำกันเพียงค่าเดียวครับ เช่น
History_Index มีค่า 1 , 1 , 2 , 3 , 1 , 4, 2, 3 , 5 ,7

เมื่อ group by จะได้ 1 , 2 ,3 ,4 ,5 ,7
Date : 2010-04-28 13:39:26 By : kaos
 


 

No. 4



โพสกระทู้ ( 178 )
บทความ ( 0 )



สถานะออฟไลน์


ลอง ใหม่น่ะครับ โทษที่ มึนครับ พอดีเขียนงานตัวเองด้วย
Date : 2010-04-28 13:43:38 By : kaos
 


 

No. 5



โพสกระทู้ ( 41 )
บทความ ( 0 )



สถานะออฟไลน์


Code
$Code='A';
$sql = "SELECT MAX(Code) AS red FROM part WHERE Code='".$Code."' GROUP BY History_Index";
$rs = mysql_fetch_array(mysql_query($sql));

print $rs['red'];
$sql = "SELECT * FROM part WHERE Code='".$Code."' and History_Index='".$rs['red']."' ";
while ($rs = mysql_fetch_array(mysql_query($sql)))
{
print $rs['Part_ID'];}


print $rs['red']; ได้ ค่า A มาค่าเดียวครับ
ผมสงสัยว่า MAX(Code) AS red เหมือนจะเก็บแต่ ค่า Code อย่างเดียวนะครับ เพราะ print $rs['red'];มีแต่ A
History_Index='".$rs['red'] ก็เหมือนsearch แต่ Code ไม่เจอค่า ตัวเลขครับ

TTwTT



ที่สำคัญครับ ผม ควร ใช้Code ที่ใช้การ query ที่ใช้คำสั่งกระชับใช่ไหมครับ เพราะ ใช้ในการquery เยอะมาก table นี้ มี ตาราง เกือบ 6000 กว่าข้อมูลครับ

เห็นมีjoin มี อะไรพวกนั้น ใช้ไม่เป็น

ขอบคุณมากๆๆๆครับ
Date : 2010-04-28 14:02:31 By : thandon
 


 

No. 6



โพสกระทู้ ( 178 )
บทความ ( 0 )



สถานะออฟไลน์


Quote:
$sql = "SELECT MAX(History_Index) AS red FROM ".$table." WHERE Code='".$Code."' GROUP BY part_ID";

ผมพิมผิด - -"



อันนี้ครับ คอมเมนที่ 3 โทษทีฮ่ะ พิมผิด
Date : 2010-04-28 14:04:59 By : kaos
 


 

No. 7



โพสกระทู้ ( 41 )
บทความ ( 0 )



สถานะออฟไลน์


Code
$Code='A';
$sql = "SELECT MAX(Code) AS red FROM part WHERE Code='".$Code."' GROUP BY History_Index";
$rs = mysql_fetch_array(mysql_query($sql));

print $rs['red'];
$sql = "SELECT * FROM part WHERE Code='".$Code."' and History_Index='".$rs['red']."' ";
while ($rs = mysql_fetch_array(mysql_query($sql)))
{
print $rs['Part_ID'];}



อ๋อพอดี แก้แล้วครับ ได้ผล อย่างนั้นเลยครับ
Date : 2010-04-28 14:07:16 By : thandon
 


 

No. 8



โพสกระทู้ ( 178 )
บทความ ( 0 )



สถานะออฟไลน์


เอาใหม่เลยน่ะครับ ดูสีครับพอดีผมเปลี่ยนแปลง

$sql = "SELECT MAX(History_Index) AS red,Part_ID FROM ".$table." WHERE Code='".$Code."' GROUP BY part_ID";

$rs = mysql_fetch_array(mysql_query($sql));

print $rs['red'];

print $rs['Part_ID'];
Date : 2010-04-28 14:12:01 By : kaos
 


 

No. 9



โพสกระทู้ ( 41 )
บทความ ( 0 )



สถานะออฟไลน์


ไม่รอด
ขึ้น ข้อมูลมา ข้อมูลเดียวครับ
พอใส่ while ก็ เป็นข้อมูลเดียว ต่อกันไม่สิ้นสุดครับ
แต่ไม่เป็นไร ครับ คุณkaos มีน้ำใจมากๆ ขอขอบคุณอีกครั้งนะครับ
Date : 2010-04-28 14:24:28 By : thandon
 


 

No. 10



โพสกระทู้ ( 178 )
บทความ ( 0 )



สถานะออฟไลน์


เปปนะครับ ผมมั่วใหญ่หละ ลองใหม่
Code (PHP)
$sql = "SELECT MAX(History_Index) AS red,Part_ID FROM ".$table." WHERE Code='".$Code."' GROUP BY part_ID";
$result = mysql_query($sql);
while($rs = mysql_fetch_array($result))
{
 print $rs['Part_ID']."=".$rs['red'];
}

Date : 2010-04-28 14:29:12 By : kaos
 


 

No. 11



โพสกระทู้ ( 41 )
บทความ ( 0 )



สถานะออฟไลน์


Code (PHP)
$sql = "SELECT MAX(History_Index) AS red,Part_ID FROM part WHERE Code='B' GROUP BY part_ID";
$result = mysql_query($sql);
while($rs = mysql_fetch_array($result))
{
 print $rs['Part_ID']."=".$rs['red'].'</br>';
}


ได้แล้วนะครับ
ขอบคุณครับ ขอถามอีกนิดนึง ถ้าต้องการให้ นำ ตัวแปรอื่นมาใช้งาน ทำไงครับ


$sql = "SELECT MAX(History_Index) AS Part_ID,Code,Main_No,Special,Part_name,Material ,History_Index,Group_ID,status,subPart_ID,Remark FROM part WHERE Code='B' GROUP BY part_ID";

ผมคิดออกได้อย่างเดียว

ไม่เคยเห็นวิธเขียน แบบ as น่ะครับ แปลว่าอะไรเหรอครับ
Date : 2010-04-28 14:40:16 By : thandon
 


 

No. 12



โพสกระทู้ ( 178 )
บทความ ( 0 )



สถานะออฟไลน์


Quote:
$sql = "SELECT MAX(History_Index) AS Part_ID,Code,Main_No,Special,Part_name,Material ,History_Index,Group_ID,status,subPart_ID,Remark FROM part WHERE Code='B' GROUP BY part_ID";

ผมคิดออกได้อย่างเดียว

ไม่เคยเห็นวิธเขียน แบบ as น่ะครับ แปลว่าอะไรเหรอครับ


SELECT ......................... FROM

ตรง ....... จะใส่ชื่อ ฟิลครับ
โดย จะใส่ แบบ นี้ครับ

เช่น SELECT Part_ID FROM << จะเรียก แค่ Part_ID ฟิลเดียว แต่ถ้าต้องการเพิ่มก็ ใช้ , ครับ เช่น
SELECT Part_ID,Code,Part_name FROM


ส่วน as คือ เก็บลงตัวแปรครับ อธิบาย ง่ายคือ
SELECT Part_ID FROM <<< เวลา เรียก $rs['Part_ID'] ครับ หรือ
SELECT MAX(History_Index) FROM <<< เวลา เรียก $rs['MAX(History_Index)'] ครับ จะเห็นได้ว่าชื่อมันยาว จำยาก ก็เลย

SELECT MAX(History_Index) as red FROM เรียก $rs['red'] ครับ หรือ
SELECT Part_ID FROM <<< เวลา เรียก $rs['red'] ครับ
Date : 2010-04-28 14:50:00 By : kaos
 


 

No. 13



โพสกระทู้ ( 41 )
บทความ ( 0 )



สถานะออฟไลน์


ผมเข้าใจล่ะ เป็นการเปลี่ยนชื่อ เฉยๆ
ปกติ ผมจะใช้ SELECT * ครับ
เพิ่งมารู้เมื่อวานว่า SELECT ใช้เฉพาะ ตัว แปร ก็พอ จะได้ไม่เปลืองทรัพายากร

ขอบคุณคุณ kaos มากๆๆๆๆครับ สำหรับ ความรู้ และ code แก้ปัญหาครับ
Date : 2010-04-28 15:07:04 By : thandon
 


 

No. 14



โพสกระทู้ ( 178 )
บทความ ( 0 )



สถานะออฟไลน์


-


ประวัติการแก้ไข
2010-09-27 14:54:39
2010-09-27 14:58:24
2010-09-27 14:59:01
Date : 2010-09-27 14:54:16 By : kaos
 

   

ค้นหาข้อมูล


   
 

แสดงความคิดเห็น
Re : ถาม เรื่องการดึงข้อมูล เป็น กลุ่มซ้อนกลุ่ม และให้แสดง ค่าอันดับสูงสุด
 
 
รายละเอียด
 
ตัวหนา ตัวเอียง ตัวขีดเส้นใต้ ตัวมีขีดกลาง| ตัวเรืองแสง ตัวมีเงา ตัวอักษรวิ่ง| จัดย่อหน้าอิสระ จัดย่อหน้าชิดซ้าย จัดย่อหน้ากึ่งกลาง จัดย่อหน้าชิดขวา| เส้นขวาง| ขนาดตัวอักษร แบบตัวอักษร
ใส่แฟลช ใส่รูป ใส่ไฮเปอร์ลิ้งค์ ใส่อีเมล์ ใส่ลิ้งค์ FTP| ใส่แถวของตาราง ใส่คอลัมน์ตาราง| ตัวยก ตัวห้อย ตัวพิมพ์ดีด| ใส่โค้ด ใส่การอ้างถึงคำพูด| ใส่ลีสต์
smiley for :lol: smiley for :ken: smiley for :D smiley for :) smiley for ;) smiley for :eek: smiley for :geek: smiley for :roll: smiley for :erm: smiley for :cool: smiley for :blank: smiley for :idea: smiley for :ehh: smiley for :aargh: smiley for :evil:
Insert PHP Code
Insert ASP Code
Insert VB.NET Code Insert C#.NET Code Insert JavaScript Code Insert C#.NET Code
Insert Java Code
Insert Android Code
Insert Objective-C Code
Insert XML Code
Insert SQL Code
Insert Code
เพื่อความเรียบร้อยของข้อความ ควรจัดรูปแบบให้พอดีกับขนาดของหน้าจอ เพื่อง่ายต่อการอ่านและสบายตา และตรวจสอบภาษาไทยให้ถูกต้อง

อัพโหลดแทรกรูปภาพ

Notice

เพื่อความปลอดภัยของเว็บบอร์ด ไม่อนุญาติให้แทรก แท็ก [img]....[/img] โดยการอัพโหลดไฟล์รูปจากที่อื่น เช่นเว็บไซต์ ฟรีอัพโหลดต่าง ๆ
อัพโหลดแทรกรูปภาพ ให้ใช้บริการอัพโหลดไฟล์ของไทยครีเอท และตัดรูปภาพให้พอดีกับสกรีน เพื่อความโหลดเร็วและไฟล์ไม่ถูกลบทิ้ง

   
  เพื่อความปลอดภัยและการตรวจสอบ กระทู้ที่แทรกไฟล์อัพโหลดไฟล์จากที่อื่น อาจจะถูกลบทิ้ง
 
โดย
อีเมล์
บวกค่าให้ถูก
<= ตัวเลขฮินดูอารบิก เช่น 123 (หรือล็อกอินเข้าระบบสมาชิกเพื่อไม่ต้องกรอก)







Exchange: นำเข้าสินค้าจากจีน, Taobao, เฟอร์นิเจอร์, ของพรีเมี่ยม, ร่ม, ปากกา, power bank, แฟลชไดร์ฟ, กระบอกน้ำ

Load balance : Server 04
ThaiCreate.Com Logo
© www.ThaiCreate.Com. 2003-2024 All Rights Reserved.
ไทยครีเอทบริการ จัดทำดูแลแก้ไข Web Application ทุกรูปแบบ (PHP, .Net Application, VB.Net, C#)
[Conditions Privacy Statement] ติดต่อโฆษณา 081-987-6107 อัตราราคา คลิกที่นี่