Intereting Posts
Захват изображения с помощью imagegrabscreen и Wamp Преобразовать недействительный json в действительный json Что происходит, когда SimpleXML анализирует XML со специальными символами? Как получить язык пользователя по ip-адресу, используя php? Php добавить массив в строку как передать переменную POST по ссылкам на собственные страницы? PHP. Получите md5 удаленного файла? Преобразование UTC-смещения в часовой пояс или дату Сохранить кодированное изображение base64 в файл в PHP Как изменить порядок значений subarray для создания таблицы с использованием PHP? Как получить XML-данные, созданные веб-сайтом (webservice) в PHP? Отображение сообщений WordPress за пределами цикла применение фона для первого и каждой третьей строки в динамически сгенерированной таблице разница между меткой времени Jquery и меткой времени php? Как остановить MySQL от дублирования записи каждого столбца в возвращаемых массивах?

Codeigniter – объединение трех таблиц в правильный формат просмотра

Полностью запутался в том, как добиться чего-то – у меня три таблицы;

  • заказы
  • Предметы
  • Продукты

В таблице заказов содержится информация о заказе, таблица элементов содержит номер идентификатора продукта и номер идентификатора заказа, а таблица продуктов содержит все детали продукта.

То, что я пытаюсь сделать, это иметь страницу «Мои заказы», ​​где вы можете просмотреть все свои прошлые заказы, и я бы хотел, чтобы у вас была следующая структура …

ЗАКАЗЫ

НОМЕР ЗАКАЗА 1

  • Пример позиции заказа
  • Второй пример заказа
  • Третий пример заказа

НОМЕР ЗАКАЗА 2

  • Пример позиции заказа
  • Второй пример заказа
  • Третий пример заказа

НОМЕР ЗАКАЗА 3

  • Пример позиции заказа
  • Второй пример заказа
  • Третий пример заказа

Теперь я могу легко перечислить все заказы, и я могу перечислить все элементы в определенном порядке, но я потерял то, как объединить эти три таблицы таким образом, что я могу перечислить их в вышеуказанном формате, я предполагаю, что могу ПРИСОЕДИНИТЬСЯ на всех трех, но я не могу заставить их выводить в любом месте рядом с правильным способом.

Кто-нибудь знает хороший способ сделать это? Спасибо заранее.

Вы можете использовать объединенный запрос, чтобы получить все заказы с их товарами

/* raw sql query */ SELECT o.*,p.*,o.id AS order_id,p.id AS product_id FROM Orders o LEFT JOIN Items i ON (o.id=i.order_id) LEFT JOIN Products p ON(p.id = i.product_id) ORDER BY order_id 

Создайте функцию в своей модели и выполните ниже запроса

 /* Using Active record */ $orders=$this->db->select('o.*,p.*,o.id AS order_id,p.id AS product_id') ->from(' Orders o ') ->join(' Items i','o.id=i.order_id','LEFT') ->join(' Products p','p.id = i.product_id','LEFT') ->order_by('order_id') ->get() ->result(); 

Получите результаты от модели в контроллере, а затем передайте ее для просмотра, при этом вы можете перебирать свои записи запросов как

 $currentParent = false; foreach ($orders as $o) { if ($currentParent != $o->order_id) { echo '<h1>ORDER NUMBER ' . $o->order_id . '</h1>'; $currentParent = $o->order_id; } echo '<p>' . htmlentities($o->product_name) . '</p>'; } 

Это будет выводиться как

 <h1>ORDER NUMBER 1</h1> <p>product 1</p> <p>product 2</p> <h1>ORDER NUMBER 2</h1> <p> product 3</p> 

Если у вас есть другая структура структуры html, соответственно, я привел приведенный выше пример, используя заголовок и тег абзаца

Редактируйте для использования в нем теги списка, вы можете сделать это

 echo '<ul><li>'; $currentParent = false; foreach ($orders as $o) { if ($currentParent != $o->order_id) { if ($currentParent != false) { echo '</ul></li><li>'; } echo '<h1>ORDER NUMBER ' . $o->order_id . '</h1><ul>'; $currentParent = $o->order_id; } echo '<li>' . htmlentities($o->product_name) . '</li>'; } echo '</li></ul>'; 

Это будет выводиться как

 <ul> <li> <h1>ORDER NUMBER 1</h1> <ul> <li><p>product 1</p></li> <li><p>product 2</p></li> </ul> </li> <li> <h1>ORDER NUMBER 2</h1> <ul> <li><p> product 3</p></li> </ul> </li> </ul>