У нас есть простая база данных. В таблице пользователя содержатся пользователи. В таблице «Учетные записи» есть несколько учетных записей для каждого пользователя. В таблице «Темы» содержатся несколько тем для каждой учетной записи.Как эффективно выполнять sql-запрос дочерних записей из нескольких таблиц?
Итак, у пользователя будет несколько учетных записей, и каждая учетная запись будет иметь несколько тем. Итак, если у меня есть пользователь с id = 1, как я могу эффективно запросить все 3 таблицы, чтобы получить все учетные записи и темы для этого пользователя?
В настоящее время я использую петли foreach, которые запускают много запросов sql. Есть ли способ запустить один SQL-запрос, чтобы получить то, что я хочу?
Вот код, который я сейчас использую (что CodeIgniter код):
$data=array();
$accounts=$this->db->get_where('accounts',array('user_id'=>1));
foreach ($accounts->result() as $account) {
$tmp=array();
$topics=$this->db->get_where('topics',array('account_id'=>$account->id));
foreach ($topics->result() as $topic) {
$this->db->order_by($order_by);
$terms=$this->db->get_where('terms',array('topic_id'=>$topic->id));
array_push($tmp,array('topic'=>$topic, 'terms'=>$terms->result()));
}
array_push($data,array('account'=>$account, 'topics'=>$tmp));
}
return $data;
Вы ищете для SQL присоединиться? Или более элегантный PHP-синтаксис с использованием codeignitor? –
Должно ли это сделать на стороне SQL, проблема с данными, а не проблема с пользовательским интерфейсом. – JonH
Что делать, если у одной из учетных записей еще нет тем? Вы все еще не хотите получать эту учетную запись? То же самое касается терминов. Что, если в теме нет каких-либо условий? Вы хотите восстановить тему? Возможно, эти ситуации невозможны, но если они есть, они являются важными деталями. – goat