Соединение SQL в CodeIgniter с активной записью

Я пытаюсь обернуть голову вокруг этого, но я, кажется, по кругу. Я пытаюсь перечислить темы пользователей один за другим, с кавычками, относящимися к этой конкретной теме внизу. Если это имеет смысл.

У меня 3 таблицы, вот так:

[USERS] user_id имя пользователя

[ТЕМЫ] topic_id user_id topic_name

[QUOTES] quote_id topic_id quote_name

Я хочу иметь возможность сделать что-то вроде этого на мой взгляд:

Имя пользователя: Thomas

Тема 1: Что бы ни было

Цитаты: одна цитата, другая цитата и третья цитата, все из которых относятся к теме 1.

Тема 2: Еще одна тема из Томаса

Цитаты: Да, да, спасибо, я люблю переполнение стека, эти цитаты принадлежат теме 2.

Но я не могу заставить его работать, я пробовал все, включая такие странные вещи, как:

public function get_quotes() { $this->db->select('*'); $this->db->from('topics'); $this->db->join('quotes', 'topic_id = quote_id'); $query = $this->db->get(); if($query->num_rows() > 0) { foreach ($query->result() as $row) { $data[] = $row; } } return $data; } 

Странно ли, вместо этого я вместо этого пытаюсь использовать «где»? Что-то вроде:

 $this->db->where('user', $user_id); $this->db->where('topic', $topic_id); $this->db->where('quote', $quote_id); 

Я очень ценю любую помощь, которую я могу получить, или просто пальцем, направленным в правильном направлении!

С самого начала я спросил: «Что не работает?» , во-вторых, я предлагаю вам запустить профилировщик, чтобы показать вам генерируемый EXACT SQL , чтобы вы могли правильно оценить, где АКТИВНЫЙ ЗАПРОС вас терпит неудачу.

Чтобы использовать профилировщик, вставьте это в свой контроллер:

 $this->output->enable_profiler(TRUE); 

Это приведет к хорошему выводу всех вызовов БД, всех POST-варов и т. Д .;
Ссылка здесь: http://codeigniter.com/user_guide/libraries/output.html

ОБНОВИТЬ

Чтобы полностью выполнить то, что вы хотите, вам нужен запрос, который возвращает следующие столбцы:

 user_id, username, topic_id, topic_name, quote_id, quote_name 

Вот активный запрос, который вы хотите (вы также можете использовать цепочку методов, если это достаточно ясно):

 $this->db->select('u.user_id, u.username, t.topic_id, t.topic_name, q.quote_id, q.quote_name'); $this->db->from('users u'); $this->db->join('topics t', 't.user_id = u.user_id'); // this joins the user table to topics $this->db->join('quotes q', 'q.topic_id = t.topic_id'); // this joins the quote table to the topics table $query = $this->db->get(); 

Тогда ваш результирующий набор будет выглядеть примерно так:

 user_id | username | topic_id | topic_name | quote_id | quote_name 1 |Thomas |1 |Whatever |1 |One quote, anot... 2 |Ryan |4 |Another... |6 |To be or not to... 

После того, как у вас есть этот набор результатов, просто пропустите данные для его вывода и проверьте, есть ли у вас несколько котировок от одного и того же человека (скажем, сортировка по user_id и выполнить тест во втором цикле, если его одно и то же лицо, иначе вывод имя нового пользователя).

Если вы хотите, чтобы все кавычки для конкретного пользователя:

 $this->db->join('TOPICS t', 'u.user_id on t.user_id') ->join('QUOTES q', 't.topic_id on q.topic_id') ->where('u.user_id', $userId) ->get('USERS u'); // I always echo my queries when developing to make sure they are what i'm expecting echo $this->db->last_query(); 

Если вы хотите, чтобы все котировки для всех пользователей

 $this->db->join('TOPICS t', 'u.user_id on t.user_id') ->join('QUOTES q', 't.topic_id on q.topic_id') ->get('USERS u'); echo $this->db->last_query();