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 > ขอสอบถามเรื่องของการ Count Product แยกตาม Category หน่อยครับ



 

ขอสอบถามเรื่องของการ Count Product แยกตาม Category หน่อยครับ

 



Topic : 112104



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



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



Category
id | category_name | parent_id -------------------------------------- 1 | computers | 0 2 | apple | 2 3 | microsoft | 2 4 | accessories | 0 5 | mouse | 4 6 | keyboards | 4 7 | printers | 4



Product
id | product_name | category_id -------------------------------------- 1 | macbook pro | 2 2 | macbook air | 2 3 | surface pro | 3 4 | ipad | 2 5 | backlit keyboard | 6 6 | mini keyboard | 6 7 | 3 in 1 printer | 7



อยากแยกสินค้าออกมาเป็นแบบนี้ครับ

computers (4)
-apple (3)
-microsoft (1)

accessories (3)
-keyboards (2)
-printers (1)

เราจะเขียนให้ SELECT ข้อมูลมาได้อย่างไรครับถึงจะแสดงข้อมูลออกมาครบทุกอย่าง

Code (PHP)
						function get_cate($parent, $level) {
							$result = mysql_query("SELECT c.category_id, c.category_name, d.Count FROM category c  LEFT OUTER JOIN (SELECT category_parent, COUNT(*) AS Count FROM category GROUP BY category_parent) d ON c.category_id = d.category_parent WHERE c.category_parent=" . $parent);

							while ($row = mysql_fetch_assoc($result)) {
								$arr = mysql_fetch_assoc(mysql_query("select count(p.category_id) as num_product from product p where p.category_id='$row[category_id]'"));
								
								if ($row['Count'] > 0) {
									echo "<tr><td><a href='" . $row['category_name'] . "'>" . $row['category_name'] . "</a>";
									get_cate($row['category_id'], $level + 1);
									echo "</td><td>".$arr['num_product']." ชิ้น</td></tr>";
								} elseif ($row['Count']==0) {
									echo "<li><a href='" . $row['category_name'] . "'>" . $row['category_name'] . "</a> ".$arr['num_product']." ชิ้น</li>";
								} else;
							}

						}
						echo get_cate(0, 1);	


อันนี้ลองเขียนออกมาแล้ว แต่จำนวนสินค้าแสดงไม่ตรงครับ

สมมุติว่า
ต้องการให้ออกมาเป็น
computers (1)
-apple (1)


แต่พอ Query มา ได้เป็น

computers (0)
-apple (1)

แบบนี้แทนครับ



Tag : PHP







Move To Hilight (Stock) 
Send To Friend.Bookmark.
Date : 2014-10-22 20:17:41 By : asustak View : 757 Reply : 3
 

 

No. 1



โพสกระทู้ ( 74,058 )
บทความ ( 838 )

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

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

Code (SQL)
SELECT a.category_name , COUNT(b.id) AS Num FROM Category a
LEFT JOIN Product b ON a.id  = b.category_id
GROUP BY a.category_name







แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2014-10-23 09:38:29 By : mr.win
 


 

No. 2



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



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

ตอบความคิดเห็นที่ : 1 เขียนโดย : mr.win เมื่อวันที่ 2014-10-23 09:38:29
รายละเอียดของการตอบ ::
Code (PHP)
SELECT a.category_name , COUNT(b.id) AS Num FROM Category a
LEFT JOIN Product b ON a.id  = b.category_id
GROUP BY a.category_name




อันนี้ผมลองแล้วแต่ผลลัพธ์ที่ได้ออกมาเป็นดังนี้ครับ

TEST1 (0)
subtest1-1 (1)
subtest1-2 (1)

อยากให้ออกมาในรูปแบบ

TEST1 (2)
subtest1-1 (1)
subtest1-2 (1)

ครับ

ถ้าในกรณีมีหลายหมวดหมู่ มันจะแสดงผลเป็น

subtest1-1 (1)
subtest1-2 (1)
subtest2-1 (1)
subtest2-2 (1)
TEST1 (0)
TEST2 (0)


เป็นแบบนี้แทนครับ

ผมอยากให้ออกมาเป็นในรูปแบบ

TEST1 (0)
-subtest1-1 (1)
-subtest1-2 (1)

TEST2 (0)
-subtest2-1 (1)
-subtest2-2 (1)

ลอง QUERY จนตาลายแล้วแต่ก็ยังไม่ได้สักที


ถ้าลอง CODE

Code (PHP)
function get_cate($parent, $level) {
	$result = mysql_query("SELECT c.category_id, c.category_name, d.Count FROM category c  LEFT OUTER JOIN (SELECT category_parent, COUNT(*) AS Count FROM category GROUP BY category_parent) d ON c.category_id = d.category_parent WHERE c.category_parent=" . $parent);

	while ($row = mysql_fetch_assoc($result)) {
		$arr = mysql_fetch_assoc(mysql_query("select count(p.category_id) as num_product from product p where p.category_id='$row[category_id]'"));
		
		if ($row['Count'] > 0) {
			echo "<tr><td><a href='" . $row['category_name'] . "'>" . $row['category_name'] . "</a>";
			get_cate($row['category_id'], $level + 1);
			echo "</td><td>".$arr['num_product']." ชิ้น</td></tr>";
		} elseif ($row['Count']==0) {
			echo "<li><a href='" . $row['category_name'] . "'>" . $row['category_name'] . "</a> ".$arr['num_product']." ชิ้น</li>";
		} else;
	}

}
echo get_cate(0, 1);	



เวลา QUERY ออกมาจะพบปัญหาดังนี้ครับ

TEST2

TEST1
-subtest1-1
-subtest1-2

-subtest2-1
-subtest2-2

จะแสดแผลเป็นลักษณะนี้ครับ

รบกวนขอคำปรึกษาเพื่อเป็นแนวทางในการพัฒนาความสามารถหน่อยนะครับ


ประวัติการแก้ไข
2014-10-23 18:27:17
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2014-10-23 18:20:54 By : asustak
 

 

No. 3



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



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

Code (PHP)
function retrieveSubTree($parent, $myarray) {
    $tempArray = $myarray;
    $array = array();           
    //now we have our top level parent, lets put its children into an array, yea!
    while ($child = array_search($parent, $tempArray)) {
        unset($tempArray[$child]);
        //now lets get all this guys children
        if (in_array($child, $tempArray)) {
            $array[$child] = retrieveSubTree($child, $tempArray);
        } else {
            $array[$child] = true;
        }
    }//end while
    return (!empty($array)) ? $array : false;
}

function retrieveTree($myarray) {
    $array = array();
    $counter = 0;
    foreach ($myarray as $key => $value) {
        $child = $key;
        $parent = $value;
        //if this child is a parent of somebody else
        if (in_array($child, $myarray) && $parent != '0') {
            while ($myarray[$parent] != '' && $myarray[$parent] != '0') {
                $newparent = $myarray[$parent];
                $parent = $newparent;
            }
            if (!array_key_exists($parent, $array)) {
                $array[$parent] = retrieveSubTree($parent, $myarray);
            }
        } else {
            //now make sure they don't appear as some child
            if (!array_key_exists($parent, $myarray)) {
                //see if it is a parent of anybody
                if (in_array($child, $myarray)) {
                    $array[$child] = retrieveSubTree($child, $myarray);
                } else {
                    $array[$child] = true;
                }
            }//end if array key
        }//end initial in array
    }//end foreach
    return (!empty($array) ? $array : false);
} 

$test = array(
    '1'=>'15',
    '2'=>'1',
    '3'=>'1',
    '4'=>'0',
    '5'=>'0',
    '6'=>'4',
    '7'=>'6',
    '8'=>'7',
    '9'=>'2',
    '10'=>'9'
);


ผมลอง search เจอ code ตัวนี้มาครับ เดี๋ยวจะลองหาแนวทางมาประยุกต์ดูครับ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2014-10-23 18:31:17 By : asustak
 

   

ค้นหาข้อมูล


   
 

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