2017-10-19 1 views
0

J'ai besoin de codeigniter 3 aide de vos amis. C'est comme il y a 10 ans quand j'ai fait des querys plus complexes et mon JOIN-trys noobish m'a juste donné des erreurs et des questions pendant des heures.codeigniter rejoindre la même table plusieurs valeurs

permet de dire que j'ai une table mysql couvre

id, text, bgcolor_id, color_id 
example : 1, "nice headline", 55, 88 

et une couleurs de table

id, value, name 
example : 55, #FF0000, "red" 
example : 88, #000000, "black" 

comment "lien" basé sur bgcolor_id, color_id dans le tableau couvre

cover.bgcolor_id -> 
color.value AS bgcolorvalue 
color.name AS bgcolorname 

cover.color_id -> 
color.value AS colorvalue 
color.name AS colorname 

mon codeigniteur modèle

public function list(){ 
$query = $this->db->query('SELECT * FROM covers ORDER BY id DESC'); 
return $query->result_array(); 
} 

public function get($id){ 
$query = $this->db->query('SELECT * FROM covers WHERE id = ' . $id); 
return $query->row(); 
} 

Répondre

2

Joignez deux fois votre table couleurs

select c.*,c1.name bgcolorname, 
c1.value bgcolorvalue, 
c2.name colorname, 
c2.value colorvalue 
from covers c 
join colors c1 on c.bgcolor_id = c1.id 
join colors c2 on c.color_id = c2.id 

DEMO

+0

oh mec. Hommes. Im impressionné - cela fonctionne. J'essaie de comprendre votre requête si fort que mon cerveau fume déjà. maintenant je pense que si j'essaye de recréer ceci dans "le style actif d'enregistrements" du codeigniter ... j'espère que je l'obtiendrai après le sommeil ... – scco

+0

@scco yup l'essayer avec l'enregistrement actif si vous ne pouvez pas accomplir ceci alors laissez Je sais que je vais ajouter la version d'enregistrement active également –

+0

hey m khalid junaid, savez-vous comment je pourrais avancer votre solution sql: quand quelqu'un supprime la ligne de couleur donc il n'y a pas d'ID - la requête complète n'apparaîtra pas ou donnera des erreurs. Donc, y a-t-il un moyen de simplement "optionnel" joindre les couleurs quand il y a des couleurs - sinon juste des champs vides? – scco

0

Je recommande vivement d'utiliser le générateur de requêtes Reference

Vous pouvez à quelque chose comme.

$cv = 'covers'; 
     $cl1 = 'colors'; 
     $cl2 = 'colors'; 
     $get = array(
      $cv.'.id', 
      $cv.'.text', 
      $cv.'.bgcolor_id', 
      $cv.'.color_id', 
      $cl1.'.value as bgcolorvalue', 
      $cl1.'.name as bgcolorname', 
      $cl1.'.value as colorvalue', 
      $cl1.'.name as colorname' 
     ); 
     $this->db->select($get); 
     $this->db->from($cv); 
     $this->db->where($cv.'.id', 1); 
     $this->db->join($cl1, $cv.'.bgcolor_id = ' . $cl1.'.id'); 
     $this->db->join($cl2, $cv.'.color_id = ' . $cl2.'.id'); 
     $result = $this->db->get()->result(); 

laissez-moi savoir si cela fonctionne

+0

hey hey exe - vous causer wana savoir si cela fonctionne - il produit: Pas de table/alias unique: 'couleurs' SELECT 'covers'.'id',' covers'.'text', 'covers'. 'bgcolor_id',' covers'.'color_id', 'colors'.'value' comme' bgcolorvalue', 'colors'.'name' comme' bgcolorname', 'colors'.'value' comme' colorvalue', 'couleurs '.'name' as' colorname' FROM 'covers' JOINTE' colors' SUR 'covers'.'bgcolor_id' =' colors'.'id' JOIN 'colors' ON' covers'.'color_id' = 'colors'. 'id' O' 'couvre'.'''' = 1 – scco