Мне нужно получить данные из двух таблиц. первый - список событий, второй - список мест.codeigniter различает имена полей в таблицах JOINed
У меня есть поля с тем же именем в обеих таблицах: events.venue (который является идентификатором), а venues.venue - это название места, например «блюзовый бар». Таблицы могут быть объединены на events.venue = venues.id.
Отрывок из моей модели:
$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;
Отрывок из Вид:
foreach ($events as $row) {
echo "<p>{$row->band} ({$row->genre})<br />";
echo "Playing at: {$row->venue}<br /></p>"; // echoes "blues bar"
//more here...
}
2 Вопросы: 1) Почему $ row-> место эхо venues.venue, вместо событий. место?
B) Как я могу их отличить? например. Что делать, если я хочу повторить как events.venue, так и venues.venue? Возможно, я могу сделать что-то вроде «SELECT venues.venue as name_of_the_venue», но как это сделать, когда я уже выбрал *?
это могло бы работать, хотя с очень большой таблицей мне нужно было бы перечислить ВСЕ поля. могу ли я сделать что-то вроде «выбрать все, но считать venues.venue как имя места»? – Patrick
Почему вы не попробуете, $ this-> db-> select ('*, venues.venue AS имя_события') – Iraklis
Ираклис - вы были быстрее меня! :) Я просто собирался опубликовать комментарий, чтобы сказать, что я пробовал это: $ this-> db-> select ('events. *, Venues. *, Events.venue AS place_id'); и это сработало! Я не совсем уверен, что это лучшая с точки зрения хорошей практики, но она работает! – Patrick