मेरे पास 2 टेबल हैं। पहला categories है और दूसरा items है। मुझे अपनी स्क्रिप्ट को .txt फ़ाइल में श्रेणी का नाम प्रिंट करने की आवश्यकता है और इसके नीचे श्रेणी आइटम 'category_id' से मेल खाते हैं। मेरा कोड श्रेणियों के माध्यम से पुनरावृति करने के लिए पहले while लूप का उपयोग करता है और दूसरा आइटम के माध्यम से पुनरावृति करने के लिए। जब तक हम दूसरे while लूप तक नहीं पहुंच जाते, तब तक सब कुछ ठीक काम करता है, क्योंकि तब मान खाली हो जाते हैं।

while ($row2 = mysqli_fetch_array($query_for_categories)) {
    fwrite($fp, $row2["category_name"].PHP_EOL);
    while ($row = mysqli_fetch_array($query_for_items)) {
        if ($row2['id_category_from_category'] == $row['id_category_from_items']) {
            fwrite($fp, $row["item_name"].PHP_EOL);
        }
    }
}
php
-2
BainThru 9 अप्रैल 2019, 01:40

1 उत्तर

सबसे बढ़िया उत्तर

बाहरी जबकि लूप के पहले पुनरावृत्ति के बाद, आप सभी पंक्तियों को $query_for_categories से प्राप्त कर लेंगे। बाहरी जबकि लूप के बाद के पुनरावृत्तियों पर उस क्वेरी से लाने के लिए कोई और पंक्तियाँ नहीं होंगी।

आप उन सभी को पहले एक सरणी में ला सकते हैं

while ($row = mysqli_fetch_array($query_for_items)) {
    $items[] = $row;
}

फिर थोड़ी देर के बजाय उस सरणी से पंक्तियों का उपयोग करें ... लूप लाएं।

while ($category = mysqli_fetch_array($query_for_categories)) {
    fwrite($fp, $category["category_name"].PHP_EOL);
    foreach($items as $item) {
        if ($category['id_category_from_category'] == $item['id_category_from_items']) {
            fwrite($fp, $item["item_name"].PHP_EOL);
        }
    }
}

ऐसा लगता है कि आप शायद इसे एक प्रश्न में शामिल होने का उपयोग करके कर सकते हैं। मैं इसे इस तरह से करने के बजाय उसमें जाँच करने की सलाह दूंगा। आपके कोड में कॉलम नामों के आधार पर, क्वेरी कुछ इस तरह होगी:

SELECT c.category_name, i.item_name
FROM categories c
  LEFT JOIN items i on c.id_category_from_category = i.id_category_from_items
ORDER BY c.category_name, i.item_name

फिर आप इस तरह से एक लूप में श्रेणियों के साथ आइटम प्रिंट कर सकते हैं:

$previous_category = null;

while ($item = mysqli_fetch_array($query)) {

    // each time category changes, output the new category name
    if ($item['category_name'] != $previous_category) {
        fwrite($fp, $item["category_name"].PHP_EOL);

        // then current category becomes previous category
        $previous_category = $item['category_name'];
    }
    fwrite($fp, $item["item_name"].PHP_EOL);
}

मुझे आश्चर्य है कि आप कैसे बता सकते हैं कि फ़ाइल में कौन सी पंक्तियाँ आइटम हैं और कौन सी श्रेणियां हैं, हालाँकि। हो सकता है कि आपको उसके लिए किसी प्रकार का संकेतक आउटपुट करना चाहिए?

1
Don't Panic 8 अप्रैल 2019, 23:30