2009-07-24 7 views
4

J'utilise codeigniter, et j'ai besoin d'obtenir des données de 2 tables différentes. pour l'instant, il retourne des données uniquement à partir de la table works_image. comment puis-je obtenir des données des deux tables?obtenir des données à partir de 2 tables différentes avec JOIN sql. Codeigniter

merci beaucoup!

 
$this->db->select('works_image.*', 'works.*'); 
$this->db->from('works_image', 'works'); 
$this->db->join('works', 'works.id = works_image.id_work'); 
$result = $this->db->get(); 

foreach ($result->result() as $row) { 
    echo " # " . $row->id . " - " . $row->thumb . " - " . $row->wname . "
"; }
+0

MayBe ce poste vous aidera à: https://stackoverflow.com/questions/6024800/codeigniter- table-join –

Répondre

1

Ce poste devrait répondre à votre question: http://www.whypad.com/posts/codeigniter-activerecord-join-tip/178/

En bref, vous avez besoin de réécrire l'instruction select de

$this->db->select('works_image.*', 'works.*'); 

à ceci:

$this->db->select('works_image.*, works.*'); 

Notez que cette a été le premier résultat sur Google pour 'CodeIgniter rejoindre'. Essayez Googling vos questions d'abord. Vous pouvez souvent vous-même obtenir une réponse plus rapide :)

+0

J'ai effectivement cherché sur Google pendant des heures et des heures:/pour trouver une solution rapide, mais je ne pouvais pas remarquer que '' point:/aveugle moi! ça marche très bien maintenant !!! Merci! :) –

4

Tant que vous faites un SELECT * (Why is this a bad idea?), vous ne devriez pas avoir besoin de spécifier des tables avec l'appel à select(). Il sélectionnera tous les champs par défaut.

$this->db->from('works_image', 'works'); 
$this->db->join('works', 'works.id = works_image.id_work'); 
$result = $this->db->get(); 

Cela devrait fonctionner correctement.

Au lieu de cela, ce que vous devriez vraiment faire, est spécifiant exactement les champs que vous avez besoin:

$this->db->select('works_image.id, works_image.name, works_image.id_work, works.id, works.name'); // (or whichever fields you're interested in) 
$this->db->from('works_image', 'works'); 
$this->db->join('works', 'works.id = works_image.id_work'); 
$result = $this->db->get(); 

De cette façon, vous pouvez être sûr que (a) vous n'êtes pas tirer des données inutiles de votre base de données, et (b) votre code ne se cassera pas si/quand vous modifiez votre schéma de base de données.

+0

merci pour le conseil:) J'ai utilisé. * Car je n'ai déjà que quelques paramètres à table. ce ne sont pas de grandes tables. ou pensez-vous que peu importe la façon dont la petite table est, je devrais spécifier exactement quels champs j'ai besoin? –

+0

C'est toujours une bonne idée, quelle que soit la taille de la table, de spécifier exactement les champs dont vous avez besoin. – pix0r

0

Vous devriez d'écrire le code ci-dessous

$this->db->select('works_image.*', 'works.*'); 
$this->db->from('works_image'); 
$this->db->join('works', 'works.id = works_image.id_work'); 
$result = $this->db->get(); 

foreach ($result->result() as $row) { 
echo " # " . $row->id . " - " . $row->thumb . " - " . $row->wname . " 
"; 
} 

Je pense que vous obtenez votre résultat

Questions connexes