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,037

HOME > PHP > PHP Forum > สอบถามการ query ที่ถูกวิธีค่ะ รู้สึกว่า น่าจะมีวิธีที่ดีกว่าที่หนูใช้อยู่ค่ะ



 

สอบถามการ query ที่ถูกวิธีค่ะ รู้สึกว่า น่าจะมีวิธีที่ดีกว่าที่หนูใช้อยู่ค่ะ

 



Topic : 061370



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



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




คือ ตอนนี้งานที่หนูทำมันใช้เวลาค่อนข้างนานกว่าที่จะได้คำตอบน่ะค่ะ ซึ่งหนูสันนิฐานว่าน่าจะเกิดจากการ query ที่ผิดวิธีค่ะ
รบกวนช่วยเสนอแนะวิธีที่ถูกต้องหน่อยค่ะ

การ query ที่หนูทำตอนนี้

Code (PHP)
$year=2011;


// หา id สินค้าที่เข้าเงื่อนไขก่อน
$sql="select id_product from tb_product where name_product like '%milk%' ";
$query=mssql_db_query($sql);
while($result=mssql_fetch_array($query))
{
$id_product=$result[id_product];


//หาค่าเดือน 1
$sql1="select sum(total) as total1 from tb_total where id_product=$id_product AND  MONTH(docudate) = '01' AND YEAR(docudate) = '$year'
";
$query1=mssql_db_query($sql1);
while($result1=mssql_fetch_array($query1))
{
$total1=$result1[total1];
}


//หาค่าเดือน 2
$sql2="select sum(total) as total2 from tb_total where id_product=$id_product AND  MONTH(docudate) = '02' AND YEAR(docudate) = '$year'
";
$query2=mssql_db_query($sql2);
while($result2=mssql_fetch_array($query2))
{
$total2=$result2[total2];
}


//หาค่าเดือน 3
$sql3="select sum(total) as total3 from tb_total where id_product=$id_product AND  MONTH(docudate) = '03' AND YEAR(docudate) = '$year' ";
$query3=mssql_db_query($sql3);
while($result3=mssql_fetch_array($query3))
{
$total3=$result3[total3];
}


//หาค่าเดือน 4
$sql4="select sum(total) as total4 from tb_total where id_product=$id_product AND  MONTH(docudate) = '04' AND YEAR(docudate) = '$year' ";
$query4=mssql_db_query($sql4);
while($result4=mssql_fetch_array($query4))
{
$total4=$result4[total4];
}



//หาค่าเดือน 5
$sql5="select sum(total) as total5 from tb_total where id_product=$id_product AND  MONTH(docudate) = '05' AND YEAR(docudate) = '$year' ";
$query5=mssql_db_query($sql5);
while($result5=mssql_fetch_array($query5))
{
$total5=$result5[total5];
}



//หาค่าเดือน 6
$sql6="select sum(total) as total6 from tb_total where id_product=$id_product AND  MONTH(docudate) = '06' AND YEAR(docudate) = '$year' ";
$query6=mssql_db_query($sql6);
while($result6=mssql_fetch_array($query6))
{
$total6=$result6[total6];
}



//หาค่าเดือน 7
$sql7="select sum(total) as total7 from tb_total where id_product=$id_product AND  MONTH(docudate) = '07' AND YEAR(docudate) = '$year' ";
$query7=mssql_db_query($sql7);
while($result7=mssql_fetch_array($query7))
{
$total7=$result7[total7];
}



//หาค่าเดือน 8
$sql8="select sum(total) as total8 from tb_total where id_product=$id_product AND  MONTH(docudate) = '08' AND YEAR(docudate) = '$year' ";
$query8=mssql_db_query($sql8);
while($result8=mssql_fetch_array($query8))
{
$total8=$result8[total8];
}



//หาค่าเดือน 9
$sql9="select sum(total) as total9 from tb_total where id_product=$id_product AND  MONTH(docudate) = '09' AND YEAR(docudate) = '$year' ";
$query9=mssql_db_query($sql9);
while($result9=mssql_fetch_array($query9))
{
$total9=$result9[total9];
}



//หาค่าเดือน 10
$sql3="select sum(total) as total10 from tb_total where id_product=$id_product AND  MONTH(docudate) = '10' AND YEAR(docudate) = '$year' ";
$query10=mssql_db_query($sql10);
while($result10=mssql_fetch_array($query10))
{
$total10=$result10[total10];
}



//หาค่าเดือน 11
$sql11="select sum(total) as total11 from tb_total where id_product=$id_product AND  MONTH(docudate) = '11' AND YEAR(docudate) = '$year' ";
$query11=mssql_db_query($sql11);
while($result11=mssql_fetch_array($query11))
{
$total11=$result11[total11];
}



//หาค่าเดือน 12
$sql12="select sum(total) as total12 from tb_total where id_product=$id_product AND  MONTH(docudate) = '12' AND YEAR(docudate) = '$year' ";
$query12=mssql_db_query($sql12);
while($result12=mssql_fetch_array($query12))
{
$total12=$result12[total12];
}







}





Tag : PHP, Ms SQL Server 2005









ประวัติการแก้ไข
2011-06-08 17:58:13
Move To Hilight (Stock) 
Send To Friend.Bookmark.
Date : 2011-06-08 17:51:20 By : naked13 View : 1004 Reply : 6
 

 

No. 1



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

สมาชิกที่ใส่เสื้อไทยครีเอท Hall of Fame 2012

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

ลองใช้วิธีเก็บค่า total ใส่ไว้ในตัวแปร array น่ะครับ
ทั้งหมด 12 ค่า ใน array คือ 0-11
*** ผมยังไม่ค่อยเข้าใจว่าคุณจะหาอะไรน่ะครับ
อาจไม่ตรงความต้องการเท่าไหร่ เพราะดูโค้ดคุณแล้ว น่าจะมีการวนลูปค่า id อีกหลายตัว และแต่ละ id ก็ต้องเก็บ totalทั้ง 12 เดือนอีก

อันนี้เป็น Code ตัวอย่างที่ผมทำขึ้นมาง่ายๆ เอาไปรันดูเป็นแนวทางน่ะครับCode (PHP)
<?
$S_month = 1;
$Month = 12;

while($Month > 0)
{

	$total[]=$S_month;

$S_month++;
$Month = $Month -1;
}


$size=Count($total);

$array_st=0;

while($size > 0)
{
echo $total[$array_st]."<br>";
$array_st++;
$size = $size-1;
}
?>









ประวัติการแก้ไข
2011-06-08 18:40:11
2011-06-08 18:40:26
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2011-06-08 18:39:47 By : mangkunzo
 


 

No. 2



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



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


SELECT
sumif(MONTH(docudate)='01', total, 0) as total01
sumif(MONTH(docudate)='02', total, 0) as total02
sumif(MONTH(docudate)='03', total, 0) as total03
.........
sumif(MONTH(docudate)='12', total, 0) as total12
FROM tb_total
WHERE id_product=$id_product AND YEAR(docudate) = '$year' ";

ใส่พวกเครื่องหมาย '' หรือ "" ให้ถูกด้วยนะครับ แล้วก็เอา query ไปลองใน Tool ต่างๆเพื่อความชัวร์ด้วยนะครับ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2011-06-08 18:50:58 By : Songkram
 

 

No. 3



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



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


ใส่ index ให้กับฟิลด์ id_product , docudate ลองดูว่ามันเร็วขึ้นไหม
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2011-06-08 20:07:43 By : avsqlz
 


 

No. 4

Guest



แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2011-06-08 21:08:26 By : g4est
 


 

No. 5



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



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


sum if ใช้กับ mysql ได้อย่างเดียวใช่ไหมคะ พอใช้กับ mssql แล้วจะ error ค่ะ


ประวัติการแก้ไข
2011-06-08 22:30:22
2011-06-08 22:45:46
2011-06-08 23:13:51
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2011-06-08 22:29:52 By : naked13
 


 

No. 6

Guest


$sql="select tb_product.id_product,MONTH(tb_total.docudate) as month_num,sum(tb_total.total) as totalx from tb_product
inner join tb_total on tb_product.id_product=tb_total.id_product
where tb_product.name_product like '%milk%' and AND YEAR(tb_total.docudate) = '$year'";
group by tb_product.id_product,MONTH(tb_total.docudate)
order by 1,2";
$query=mssql_db_query($sql);
while($result=mssql_fetch_array($query)){
$total_all_id_produce_12month[$result[id_product]][intval($result[month_num])]=$result[totalx];
}

ตอนเอาไปใช้ก็

foreach($total_all_id_produce_12month as $id_product=>$arr_total){
for($i=1;$i<=12;$i++){
echo"<br>$id_product ==> month($i)==> ".$arr_total[$i];
}
}
ก็ประมาณนี้ (เอาไป run แล้วอาจมี error บ้างเพราะเขียนสด ไม่ได้ test ครับ)


ปล.ถ้าข้อมูลจำนวนมาก INDEX จะมีผลอย่างเห็นได้ชัด
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2011-06-09 02:44:24 By : ผ่านมา
 

   

ค้นหาข้อมูล


   
 

แสดงความคิดเห็น
Re : สอบถามการ query ที่ถูกวิธีค่ะ รู้สึกว่า น่าจะมีวิธีที่ดีกว่าที่หนูใช้อยู่ค่ะ
 
 
รายละเอียด
 
ตัวหนา ตัวเอียง ตัวขีดเส้นใต้ ตัวมีขีดกลาง| ตัวเรืองแสง ตัวมีเงา ตัวอักษรวิ่ง| จัดย่อหน้าอิสระ จัดย่อหน้าชิดซ้าย จัดย่อหน้ากึ่งกลาง จัดย่อหน้าชิดขวา| เส้นขวาง| ขนาดตัวอักษร แบบตัวอักษร
ใส่แฟลช ใส่รูป ใส่ไฮเปอร์ลิ้งค์ ใส่อีเมล์ ใส่ลิ้งค์ 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 01
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 อัตราราคา คลิกที่นี่