2010-04-02 5 views
2

J'ai besoin de récupérer des données de deux tables. le premier est une liste d'événements, le second est une liste de lieux.codeigniter différencier les noms de champs dans les tables JOINDES

J'ai un champs avec le même nom dans les deux tables: events.venue (qui est un ID) et lieux.venue est le nom de l'endroit, disons "blues bar". Les tables peuvent être jointes sur events.venue = lieux.id.

Snippet de mon modèle:

$this->db->select('events.*, venues.*'); 
     $this->db->join('venues', 'events.venue = venues.id'); 
     if ($date != 'all') 
     { 
      $this->db->where('date', $date); 
     } 

     if ($keyword) 
     { 
      $this->db->like('description', $keyword); 
      $this->db->or_like('band', $keyword); 
      $this->db->or_like('venue', $keyword); 
      $this->db->or_like('genre', $keyword); 
     } 

     $Q = $this->db->get('events'); 
     if ($Q->num_rows() > 0) 
     { 
      foreach ($Q->result() as $row) 
      { 
       $data[] = $row; 
      } 
     } 

     $Q->free_result(); 
     return $data; 

Snippet de la vue:

foreach ($events as $row) { 
      echo "<p>{$row->band} ({$row->genre})<br />"; 
      echo "Playing at: {$row->venue}<br /></p>"; // echoes "blues bar" 
//more here... 
} 

2 Questions: 1) Pourquoi est-ce lieu $ ligne-> echo venues.venue, au lieu des événements. lieu?

B) comment puis-je les différencier? par exemple. Et si je veux faire écho à la fois à events.venue et à events.venue? Je peux probablement faire quelque chose comme "SELECT lieux.venue comme nom_de_la_venue", mais comment puis-je le faire quand j'ai déjà sélectionné *?

Répondre

6

Quick fix:

$this->db->select('events.col1 AS ev_col1, 
        events.col2 AS ev_col2, 
        venues.col1 AS ven_col1, 
        venues.col2 AS ven_col2); 

Où col1, col2 sont les colonnes de vos tables. puis utilisez

$row->ven_col1 

pour accéder aux valeurs.

+0

cela pourrait fonctionner bien qu'avec une très grande table je devrais énumérer TOUS les champs. Est-ce que je peux faire quelque chose comme "tout sélectionner mais considérer les sites.venue comme lieu_nom"? – Patrick

+2

Pourquoi ne pas l'essayer, $ this-> db-> select ('*, venues.venue AS lieu_name') – Iraklis

+2

Iraklis - vous avez été plus rapide que moi! :) J'allais simplement poster un commentaire pour dire que j'avais essayé ceci: $ this-> db-> select ('events. *, Venues. *, Events.venue AS lieu_id'); et ça a marché! Je ne suis pas entièrement sûr que ce soit le meilleur en termes de bonne pratique, mais ça marche! – Patrick

Questions connexes