Я пытаюсь обернуть голову вокруг этого, но я, кажется, по кругу. Я пытаюсь перечислить темы пользователей один за другим, с кавычками, относящимися к этой конкретной теме внизу. Если это имеет смысл.
У меня 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();