2013-03-18 4 views
0

Je ne suis pas sûr de savoir la meilleure façon de poser cette question, si vide avec moi.CodeIgniter Framework/Plusieurs tables MySQL

Partie 1 (la partie MySQL)

J'utilise CI et MySQL (même serveur). Je n'ai jamais travaillé avec plusieurs tables travaillant ensemble, je ne suis pas sûr si j'ai besoin d'établir des relations ou si PHP va parler pour moi.

Voici ce que je suis en train d'accomplir:

Tableau: Articles (ce tableau est où chaque élément est stocké)

Tableau: Les utilisateurs (ID utilisateur, mot de passe, informations de compte, etc.)

Table: collection (Ce tableau vous dira que x utilisateur # quantité d'article x)

J'ai déjà les configuration des éléments et des tables des utilisateurs, mais je suis perplexe sur ce qu'il faut faire avec la collection un.

Partie 2 (la partie CI/PHP)

Une fois que j'ai la configuration SQL, ce qui est la meilleure façon d'avoir des listes PHP ajouter/supprimer/mettre à jour dans la collecte et afficher les informations relatives à base hors de ce est dans la collection someones

Ex

Articles Les champs (id, nom, valeur)

utilisateurs champs (id, nom, mot de passe MD5, Dernière connexion, etc.)

Collection Les champs (id, itemid, userid, montant)

Je voudrais pouvoir afficher tous les éléments pour l'utilisateur actuellement connecté, connecté variable utilisateur vient ici

function account_info($username) 
    { 
     $this->db->where('username', $username); 
     $query = $this->db->get('user'); 

     $result = $query->row(); 

     return array(
      'id' => $result->id, 
      'firstname' => $result->firstname, 
      'lastname' => $result->lastname, 
      'email' => $result->email, 
      'joindate' => $result->joindate 
      ); 

    } 

Supposons que mon ID utilisateur unique soit 1 et que les lignes suivantes figurent dans la table Collection:

id | userid | itemid | montant

1 | 1 | 23 | 1

2 | 1 | 25 | 3

3 | 2 | 20 | 5

4 | 1 | 24 | 1

Je voudrais qu'il retourne uniquement les lignes 1,2,4 avec les informations de ce que les itemsid 23,25 et 24 sont.

Je suis sûr qu'il ya un tutoriel sur la façon de faire cela dans le framework CI avec PHP, mais je n'ai pas réussi à le trouver.

Répondre

0
$query='SELECT * 
FROM Collections 
INNER JOIN Items ON Collections.itemid=Items.id 
WHERE userid=?'; 
$params=array(); 
$params[]=$user_id; 

$result=$this->db->query($query,$params); 
$result=$result->result_array(); 
//$result=$result->row_array(); // for single row 

print_r($result); //for your debugging 
return $result; 
+0

Cela a fonctionné parfaitement !!!! Merci beaucoup! – Andrew

0

La meilleure façon d'y parvenir consiste à utiliser une instruction join dans votre requête SQL. Nous pourrions écrire une requête SQL, mais la classe d'enregistrement active de CodeIgniter nous aidera à la simplifier (voir http://ellislab.com/codeigniter/user-guide/database/active_record.html).Dans votre modèle, vous pouvez écrire votre requête similaire à:

$this->db->select('*'); 
$this->db->from('Collections'); 
$this->db->join('Items', 'Collections.itemid = Company.id', 'inner'); 

Vous pouvez également modifier ce pour sélectionner les données exactes que vous voulez comme vous le feriez une requête SQL:

$this->db->select('Collections.userid, Collections.amount, Items.name, Items.value'); 

Pour sélectionner les données de une personne en particulier (par exemple: l'utilisateur « 1 » en tant que numéro d'identification), vous pouvez utiliser:

$this->db->where('Collections.userid', '1'); 

en résultat final, votre requête complète pourrait ressembler à:

$this->db->select('*'); 
$this->db->from('Collections'); 
$this->db->join('Items', 'Collections.itemid = Company.id', 'inner'); 
$this->db->where('Collections.userid', '1'); 
$query = $this->db->get(); 
return $query->result_array(); 

Vous pouvez également ajouter à gauche, à droite, extérieur, intérieur, extérieur gauche ou droit externe en tant que troisième paramètre à la fonction $this->db->join() pour permettre à gauche se joint, joint à droite, etc.

Je recommande en utilisant la classe Active Record si possible dans vos applications CodeIgniter. Cela aidera à garder vos requêtes propres, organisées et lisibles. Vraiment y jeter un oeil: http://ellislab.com/codeigniter/user-guide/database/active_record.html

+0

Cela semblerait plus simple si vous enchaîniez les requêtes pour les rendre lisibles – killstreet