2 votes

Comment utiliser une boucle foreach dans une autre boucle foreach pour parcourir deux tableaux de données différents dans codeigniter ?

Est-il possible d'utiliser une boucle foreach à l'intérieur d'une boucle foreach pour parcourir deux tables de base de données différentes afin d'obtenir un résultat ?

Je veux afficher la liste des produits insérés par admin_1 à ses utilisateurs et clients ? Et je garde les produits et les utilisateurs dans deux tables différentes. J'utilise un admin_id pour distinguer les produits et les utilisateurs. Mais je n'ai pas compris comment obtenir le résultat exact. Toute aide est la bienvenue.

Voici mon code :

<?php if (!empty($products)) { ?>
                    <?php foreach ($products as $product) { ?>

                        <?php if((($this->session->userdata('user_id')) == ($product->id_admin)) || (userdata('department') == 0 )) { ?>

1voto

mertyildiran Points 4459

La solution consiste toujours à utiliser UNION si vous souhaitez combiner les résultats de deux tableaux différents. Voir aussi https://dev.mysql.com/doc/refman/5.7/en/union.html

Voici un exemple simple d'UNION pour votre cas :

<?php

public function retrieve_products_users_by_username($this_user) { // place this function into your model
    $this->db->where('username',$this_user);
    $this->db->select('id');
    $this->db->limit(1);
    $query_for_this_user = $this->db->get('users'); // whatever table you store the admin_1
    $this_user_id = $query_for_this_user->row_array()['id'];

    $this->db->select('products.id_admin as id_admin ,products.title as column1, products.icon as column2, products.descrption as column3 ...');
    $this->db->from('products');
    $products_query = $this->db->get_compiled_select();

    $this->db->select('users.id_admin as id_admin ,users.username as column1, users.profile_picture as column2, users.address as column3 ...');
    $this->db->from('users');
    $users_query = $this->db->get_compiled_select();

    $query = $this->db->query('SELECT * FROM (' . $products_query . ' UNION ' . $users_query . ') AS u WHERE u.id_admin='.$this_user_id);
    return $query->result_array();
}

?>

J'ai écrit cette fonction avec une quantité limitée d'informations que vous avez fournies dans votre question et vos commentaires. Elle pourrait être un peu différente en réalité, selon les noms des colonnes de votre table, etc.

Quoi qu'il en soit, lorsque vous avez entièrement préparé cette fonction dans votre modèle, vous pouvez l'appeler à partir de votre contrôleur comme ceci :

<?php

$this->data['results'] = $this->YOURMODELNAME_model->retrieve_products_users_by_username('admin_1');

?>

Comme je l'ai dit UNION est votre solution. JOINDRE n'est pas votre solution car :

  • JOINDRE concatène simplement deux tableaux horizontalement
  • UNION concatène simplement deux tableaux verticalement

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X