حلقات متداخلة أخرى php + mysql الاستعلام

0

لقد بحثت عن هذا لساعات وقرأت العديد من أسئلة وأجوبة حول حلقات foreach وأثناء حلقات للإجابة على سؤالي ولكن لم أجد بعد ردًا يشبه الاستعلام الخاص بي. قوائم مصنفة في الغالب ...

لدي إعداد جدول الخلية مثل هذا

cat | product | link  | status
1   | milk    | https | in stock
1   | eggs    | https | in stock
2   | butter  | https | out of stock
2   | bread   | https | in stock
3   | bananas | https | in stock 

وترغب في تجميع البيانات في جدول متكرر php مثل هذا ؛

         Category 1
 milk    | https | in stock
 eggs    | https | in stock
         Category 2
 butter  | https | out of stock
 bread   | https | in stock
         Category 3
 bananas | https | in stock 

ما نوع الحلقة المتداخلة التي سأحتاجها؟ هل أنا بحاجة لاستدعاء استعلام الخلية الثاني في صفوف تجميع حلقة متداخلة من قبل cat ؟؟؟

شكر :)

وأضاف كود PHP تحرير

$stmt = $con->prepare("SELECT * FROM wp_products ORDER BY cat");
$stmt->execute();

$results = $stmt->get_result();
echo "<p><center><h4>Master List</h4></center></p>";
echo "<table>
<tr>
<th>Product</th>
<th>Link</th>
<th>Status</th>
</tr>";
if (mysqli_num_rows($results)>0){
while($row = $results->fetch_assoc())
{
  echo "<tr><td>" . $row['product'] ."</td>";
  echo "<td>". $row['link'] ."</td>;
  echo "<td>". $row['status'] ."</td></tr>";
}
}
echo "</table>";

2 الاجابة

1
افضل جواب

في الغالب سيكون مثل أدناه.

الفكرة هي

  1. فرز الصفوف مع الفئة. [لقد فعلت هذا الجزء.]
  2. قم بتعريف الفئة بقيمة افتراضية.
  3. إذا كان هناك أي تغيير ، فقم بتحديث قيمة الفئة بقيمة جديدة. [كما يتم فرزها ، سيتم تجميعها دائمًا بشكل افتراضي. ]

الرمز سيكون هكذا

<?php

$stmt = $con->prepare("SELECT * FROM wp_products ORDER BY cat");
$stmt->execute();

$category = '';  # Default value for category. 

$results = $stmt->get_result();
echo "<p><center><h4>Master List</h4></center></p>";
echo "<table>
<tr>
<th>Product</th>
<th>Link</th>
<th>Status</th>
</tr>";
if (mysqli_num_rows($results) > 0) {
   while ($row = $results->fetch_assoc()) {

      # Category will be updated in this query 
      if($category != $row['cat']) { 
         $category = $row['cat']; 
         echo '<tr><td colspan="3"> Category ' . $category .' </td></tr>'; 
      }

      echo "<tr><td>" . $row['product'] . "</td>";
      echo "<td>" . $row['link'] . "</td>";
      echo "<td>" . $row['status'] . "</td></tr>";
   }
}
echo "</table>";

تفقد على. :)

:مؤلف
0

لم يتم تضمين أي رمز لأنك لم تقدم أيًا للبدء ، ولكن المفهوم هو صوت IMHO.

  • حدد الأعلى cat في قاعدة البيانات SELECT MAX(cat) FROM ...
  • حلقة من 1 إلى أعلى cat . في كل حلقة ، حدد الإدخالات التي تطابق فهرس الحلقة الحالية SELECT cat,product,link,status FROM ... .
  • حلقة على النتائج (foreach هنا مع نتائج DB) وبناء `

    <table>
      <theader>
        <tr><th colspan="3">Category $loopindex</th><tr>
      </theader>
      <tbody>
        <tr>
          <td>$result[product]</td>
          <td>$result[link]</td>
          <td>$result[status]</td>
        </tr>
      </tbody>
    </table>
    
  • زيادة +1 فهرس الحلقة

  • انتقل إلى الفئة التالية

هناك العديد من التفاصيل للعمل بها (كود PHP / HTML مناسب ، CSS لجدولك ، كيفية الوصول إلى قاعدة بيانات باستخدام PHP ، ...) ، ولكن المبدأ سيكون على ما يرام.


حسنا لقد أضفت كود بعد إجابتي

  • المشكلة مع SELECT * هو أنك تحصل على الطاولة بأكملها دفعة واحدة. قد يكون مناسبًا لقواعد البيانات الصغيرة ، ولكن هذه عادة يجب عليك تجنبها. ستحصل يومًا ما على مجموعات بيانات كبيرة (أو ستنمو هذه المجموعة).
  • كما يجب عليك التنقل بين جميع النتائج والرقم في الجدول الذي تذهب إليه كل نتيجة. سيكون لديك لتخزين ذلك في صفيف (؟) ومن هذه المصفوفات إخراج رمز الجدول HTML الخاص بك؟
  • الخاص بك ORDER BY القيمة غير مدرجة في النتيجة (بالاسم).
  • إذا فعلت الخاص بك ORDER BY cat ، على الأقل ستعلم أن كل إدخال هو الترتيب المناسب لإخراج <table> أتش تي أم أل مباشرة إلى الصفحة دون بعض آلية العازلة في الوسط.
  • بهذه الطريقة في كل مرة ترى فيها قيمة قطة جديدة ، يمكنك بدء جدول جديد ، أو إضافة <tr><td colspan="3">Category 1</td></tr> خط فاصل.

ردا على التعليق يسأل عن حلقة على الفئة.

لنفترض هذا الجدول:

name product link status
 1   p1      l1    s1
 2   p2      l2    s2
 1   p3      l3    s3
 1   p4      l4    s4

الاستعلام SELECT cat,product,link,status FROM table ORDER BY cat,product ستمنحك مجموعة النتائج هذه:

1,p1,l1,s1
1,p3,l3,s3
1,p4,l4,s3
2,p2,l2,s2

لذا ، يمكنك إجراء حلقة بحث حول هذه النتائج ، سطر واحد في كل مرة. يجب أن تحافظ كل حلقة على cat قيمة للحلقة التالية. إذا تغير ، فهذا هو المكان الذي تضع فيه رأسًا لتعريف الفئة. ثم استمر في طباعة الخطوط حتى يتم الانتهاء منها ، أو حتى يتم العثور على فئة جديدة. وعلى وعلى.

:مؤلف
فوق
قائمة طعام