2010-06-04 14 views
6

के लिए मेरे डेटाबेस निम्नलिखित सेटअपपीएचपी और MySQL: द्वारा समूह का उपयोग श्रेणियों

productid | productname | category id 

है और मैं बहुत की तरह उन्हें उत्पादन करना चाहते हैं:

category #1 
item 1 
item 2 
item 3 

category #2 
item 1 
item 2 
item 3 

मैं एक साथ समूह उनके द्वारा समूह का इस्तेमाल किया और यह ठीक काम करता है, लेकिन मैं प्रत्येक समूह के माध्यम से लूप करना चाहता हूं और उस समूह की सामग्री प्रदर्शित करना चाहता हूं। यह मैं कैसे करूंगा?

+0

जो क्वेरी आप उपयोग कर रहे हैं उसे पोस्ट करें ताकि कोई व्यक्ति डेटा खींचने के लिए PHP प्रदान कर सके। –

+0

मेरे पास कोई प्रश्न नहीं है, मेरा प्रश्न है कि कौन सी क्वेरी का उपयोग करना है। पोस्ट में मेरा डेटाबेस सेटअप (डेटा शामिल है) और मैं इसे कैसे प्रदर्शित करना चाहता हूं, मुझे और क्या शामिल करना चाहिए? – sam

उत्तर

15

मैं श्रेणी आईडी द्वारा क्रमबद्ध सभी पंक्तियों को लाने के लिए बस एक साधारण क्वेरी की अनुशंसा करता हूं। केवल श्रेणी को आउटपुट करें यदि उसका मान पिछली पंक्ति से बदलता है।

<?php 

$stmt = $pdo-> query("SELECT * FROM `myTable` ORDER BY categoryID"); 

$current_cat = null; 
while ($row = $stmt->fetch()) { 
    if ($row["categoryID"] != $current_cat) { 
    $current_cat = $row["categoryID"]; 
    echo "Category #{$current_cat}\n"; 
    } 
    echo $row["productName"] . "\n"; 
} 

?> 
2

आप जो चाहते हैं उन्हें श्रेणी के अनुसार आदेश देना है, उन्हें समूहित नहीं करना है।

SELECT * FROM MyTable 
ORDER BY category_id, product_id 

जब आप सूची के माध्यम से पुनरावृत्त करते हैं, तो श्रेणी_आईडी में परिवर्तन होने पर बस एक नया शीर्षलेख आउटपुट करें।

0

संभवतः श्रेणियों की सूची खींचने, उनके संलग्न उत्पादों को खींचने और खींचने का सबसे आसान तरीका है। (Ie कई प्रश्नों।)

उदाहरण के लिए (स्यूडोकोड):

$result = fetch_assoc("SELECT category_id FROM categories"); 
foreach($result as $row) 
{ 
    echo $row['category_id']; 
    $result2 = fetch_assoc("SELECT product_id FROM products"); 
    foreach($result2 as $row2) 
    { 
    echo $row2['product_id']; 
    } 
} 

आप यह सब एक क्वेरी आप की तरह कुछ कर सकते हैं में क्या करना चाहते हैं:

$result = fetch_assoc("SELECT product_id, category_id FROM products p JOIN categories c ON p.category_id = c.category_id ORDER BY c.category_id ASC"); 
$last = null; 
foreach($result as $row) 
{ 
    # Output the category whenever it changes 
    if($row['category_id'] != last) 
    { 
    echo $row['category_id']; 
    $last = $row['category_id']; 
    } 
    echo $row['item_id']; 
}

तो फिर तुम पुनरावृति कर सकते हैं परिणाम सेट होने पर और जब भी यह बदलता है तो श्रेणी का नाम खींचें।

एसक्यूएल को डेटाबेस से प्राप्त करने से पहले सबकुछ करने के लिए एक और परिष्कृत, सुरुचिपूर्ण तरीका हो सकता है, लेकिन मैं स्मार्ट नहीं हूं। ;)

नोट: उदाहरण छद्म कोड का उपयोग करें।

$db->query("SELECT stuff"); 
$db->multi_result(); // returns 2d-associative array

मैं तो foreach($db->multi_result() as $row) कर सकते हैं, जो सुपर आलसी और भयानक है: मैं एक mysql अमूर्त वर्ग कि तरह काम करता है का उपयोग करें।

यदि आप चाहें तो मैं एस्ट्रस्ट्रक्शन परत के लिए कोड पोस्ट कर सकता हूं।

7

यह काम करना चाहिए:

$categories = array(); 
$result= mysql_query("SELECT category_id, product_name FROM `table` GROUP BY `catagory_id` ORDER BY `catagory_id`"); 
while($row = mysql_fetch_assoc($result)){ 
    $categories[$row['category_id']][] = $row['product_name']; 
} 

// any type of outout you like 
foreach($categories as $key => $category){ 
    echo $key.'<br/>'; 
    foreach($category as $item){ 
     echo $item.'<br/>'; 
    } 
} 

उत्पादन आप अपने आप को शैली दे सकते हैं। आप श्रेणी आईडी के साथ पहली स्तर कुंजी के रूप में बस एक बहुआयामी सरणी में सबकुछ जोड़ते हैं।

संपादित: परिणामी सरणी इस प्रकार दिखाई देंगे:

$categories = array(
    'cateogy_id_1' => array(
     1 => 'item_1', 
     2 => 'item_2', 
     ... 
    ), 
    'cateogy_id_2' => array(
     1 => 'item_1', 
     2 => 'item_2', 
     ... 
    ), 
    .... 
); 
2

यह दृष्टिकोण डेटा की जरूरत नहीं है category_id के अनुसार क्रमबद्ध किया जाना है।

आप प्रत्येक श्रेणी को एक नेस्टेड सरणी में समूहबद्ध करने के लिए PHP का उपयोग कर सकते हैं। इसके बाद, डेटा को आसानी से एक टेबल में प्रदर्शित किया जा सकता है, एक अंगूर/चार्ट लाइब्रेरी, आदि को पास किया जा सकता है ...

<?php 
$stmt = $pdo-> query("SELECT * FROM myTable ORDER BY categoryID"); 


$categories = []; //the array to hold the restructured data 

//here we group the rows from different categories together 
while ($row = $stmt->fetch()) 
{ 
    //i'm sure most of you will see that these two lines can be performed in one step 
    $cat = $row["categoryID"]; //category id of current row 
    $categories[$cat][] = $row; //push row into correct array 
} 

//and here we output the result 
foreach($categories as $current_cat => $catgory_rows) 
{ 
    echo "Category #{$current_cat}\n"; 

    foreach($catgory_rows as $row) 
    { 
     echo $row["productName"] . "\n"; 
    } 
} 
?> 
संबंधित मुद्दे