2017-02-23 9 views
-1

Я пытаюсь отображать числа, разделенные , от mysql Таблица.Взрыв с использованием двух циклов foreach не работает

мой код,

$result = $check->result_array(); 

foreach($result as $res): 
    $order_id = explode(",", $res["order_id"]); // $res["order_id"] = "1,2," 

    foreach($order_id as $ord_id): 
     echo $ord_id; // output: 1 
     $query = $this->db->query('SELECT * FROM tbl_order o INNER JOIN tbl_contacts c ON c.contacts_id = o.contacts_id LEFT JOIN tbl_title t ON t.title_id = c.title_id LEFT JOIN tbl_assign a ON a.order_id = o.order_id LEFT JOIN (SELECT u.assign_id,max(u.status_id) as maxid FROM tbl_unit_status u group by u.assign_id) uu ON uu.assign_id = a.assign_id LEFT JOIN tbl_unit_status u2 on u2.status_id = uu.maxid LEFT JOIN tbl_cutter cu ON cu.cutter_id = u2.cutter_id LEFT JOIN tbl_worker w ON w.worker_id = u2.worker_id WHERE a.central_status = 1 AND a.central_assign_unit = 2 AND o.order_id != "'.$ord_id.'" ORDER BY a.assign_id DESC'); 
     $count = $query->num_rows(); 

     if($count > 0) { 
      return $query->result_array(); 
     } 
     else { 
      return 0; 
     } 
    endforeach; 
endforeach; 

для указанного выше кода выхода является 1. Но я хочу, чтобы результат был 12. Что не так в моем кодировании. Как решить эту проблему. Спасибо.

Я отредактировал свой код. Выше мой фактический код. при использовании запроса sql внутри второго цикла foreach выход равен 1.

+0

вы хотите как 12 (двенадцать)? –

+1

Очень необычно использовать нотацию 'foreach ... endforeach' и гораздо чаще использовать' foreach {...} 'вместо этого. Где вы узнали этот стиль? – tadman

+0

Я пробовал ... его рабочий тон ... – Naincy

ответ

1

Объединить заказы вместе

На данный момент, вы используете return внутри ваш цикл. Это означает, что он сразу же уйдет, когда он ударит по этой строке, и больше не зацикливается. Поэтому вместо того, вы добавляете ваши возвращенные значения в массив, а затем доход, который:

$result = $check->result_array(); 

// This will be the returned value: 
$orders = array(); 

foreach($result as $res) { 
    $order_id = explode(",", $res["order_id"]); // $res["order_id"] = "1,2," 

    foreach($order_id as $ord_id) { 

     // If your order_id string can end in ',' then watch out for empty ID's: 
     if ($ord_id == '') { 
      continue; 
     } 

     echo $ord_id; // output: 1 
     $query = $this->db->query('SELECT * FROM tbl_order o INNER JOIN tbl_contacts c ON c.contacts_id = o.contacts_id LEFT JOIN tbl_title t ON t.title_id = c.title_id LEFT JOIN tbl_assign a ON a.order_id = o.order_id LEFT JOIN (SELECT u.assign_id,max(u.status_id) as maxid FROM tbl_unit_status u group by u.assign_id) uu ON uu.assign_id = a.assign_id LEFT JOIN tbl_unit_status u2 on u2.status_id = uu.maxid LEFT JOIN tbl_cutter cu ON cu.cutter_id = u2.cutter_id LEFT JOIN tbl_worker w ON w.worker_id = u2.worker_id WHERE a.central_status = 1 AND a.central_assign_unit = 2 AND o.order_id != "'.$ord_id.'" ORDER BY a.assign_id DESC'); 
     $count = $query->num_rows(); 

     if ($count > 0) { 
      // We've got some results - merge into orders array: 
      $orders = array_merge($orders, $query->result_array()); 
     } 

    } // Removed endforeach; syntax (it's not very common) 
} 

// We can now return that orders set: 
return $orders; 

Обратите внимание, что я не сделал каких-либо изменений в самом запросе; в целом, по соображениям производительности вышеизложенное намного лучше, чем a stored procedure, или вместо этого использовать in(...) syntax. Таким образом, вы запускаете только один запрос, и между PHP и сервером базы данных намного меньше.

Смежные вопросы