2016-12-08 7 views
0

База данных возвращает все значения. Но цикл while ниже возвращает только первую категорию и ее продукты. Я хочу показать все категории и продукты соответственно. Может ли кто-нибудь найти проблему в этом коде?Пока цикл возвращает только первую категорию и ее продукты

elseif (isset($_GET['type']) && $_GET['type'] == 'getProducts') { 
     $categoriesID = array(); 
     $categories = array(); 
     $category = array(); 
     $data = array(); 
     $current_category = ''; 

     while ($results = $query->fetch_assoc()) { 

      if (!in_array($results['category_id'], $categoriesID)) { 
       $categoriesID[] = $results['category_id']; 

       $item = array(); 
       while ($resultdata = $query->fetch_assoc()) { 

        //IMAGE PATH 
        $store_id = $store_data['store_id']; 
        define('DIR_IMAGE', '../../image/uploads/' . $store_id . '/cache/'); 

    // RESIZE IMAGE 
        $extension_pos = strrpos($resultdata['product_image_url'], '.'); // find position of the last dot, so where the extension starts 
        $thumb = substr($resultdata['product_image_url'], 0, $extension_pos) . '-500x500' . substr($resultdata['product_image_url'], $extension_pos); 
    // RESIZE IMAGE 
    //IMAGE PATH 
        if ($resultdata['category_id'] == $results['category_id']) { 

         $items = array('id' => $resultdata['product_id'], 'name' => $resultdata['product_name'], 
          'price' => $resultdata['product_price'], 
          'link' => DIR_IMAGE . $thumb); 
         array_push($item, $items); 
        } 
       } 

       $categories[] = array('id' => $results['product_id'], 'cat_id' => $results['category_id'], 'category_name' => $results['category_name'], 
        'category_description' => '', 
        'data' => $item); 
      } 
     } 
     echo json_encode($categories); 

     //var_dump($categories);die; 
    } 

ответ

0

использование fetchall в цикле в то время как ниже

while ($results = $query->fetchAll()) { 
0

Когда я упростить код, я получаю:

while ($results = $query->fetch_assoc()) { 
    ... 
    while ($resultdata = $query->fetch_assoc()) { 
     .... 
    } 
} 

Совершенно очевидно, что внешняя while петля получит пробег только один раз, потому что все последующие fetch_assoc() звонки в $query будут выполняться во внутреннем цикле.