Что не так с этим запросом MySQL Code Igniter? - PullRequest
2 голосов
/ 19 января 2012

У меня есть две таблицы для хранения информации о пользователе.Один для аутентификации, другой - информация, которую пользователь вводит самостоятельно.Я пишу модель, которая будет использоваться, когда пользователь взаимодействует с этой информацией.Следующий метод - вернуть данные для отображения и изменения.

Мне нужен запрос, который вернет 'email' и 'username' из $ accounts_table и * из $ profile_table.Хотя я не могу разобраться с синтаксисом JOIN.Я понимаю, как работают объединения, но мои запросы выдают ошибки синтаксиса.

function get_userdata($id){
     $data = array();

     $this->db->get_where($this->profiles_table, array('user_id' => $id));
     $this->db->join($this->accounts_table.'.email', $this->accounts_table.'.id = '.$this->profiles_table.'.user_id');
     $data= $this->db->get();

     return $data;
}

Ответы [ 3 ]

2 голосов
/ 19 января 2012

Я вижу несколько проблем:

Вы должны использовать $ this-> db-> where () вместо $ this-> db-> get_where ().get_where () немедленно выполняет запрос.

$this->db->get_where('user_id', $id);

Также первым аргументом $ this-> db-> join () должно быть только имя таблицы, исключая поле.

$this->db->join($this->accounts_table, $this->accounts_table.'.id = '.$this->profiles_table.'.user_id');

И вы возвращаете $ data, который является просто пустым массивом ().Вам нужно будет передать результаты запроса в $ data следующим образом:

$data = $record->result_array();
1 голос
/ 19 января 2012

get_where выполняет запрос. Итак, ваш join - это собственный запрос, который не работает.

Вам нужно разбить get_where на where и from.

Кроме того, в MySQL JOIN таблица, а не поле. Если вы хотите это поле, добавьте его в SELECT.

$this->db->select($this->profiles_table.'.*');
$this->db->select($this->accounts_table.'.email,'.$this->accounts_table.'.username');
$this->db->from($this->profiles_table);
$this->db->where('user_id', $id);
$this->db->join($this->accounts_table, $this->accounts_table.'.id = '.$this->profiles_table.'.user_id');
$data = $this->db->get();

ПРИМЕЧАНИЕ: $this->db->get() возвращает объект запроса , вам необходимо использовать result или row для получения данных.

0 голосов
/ 19 января 2012

Я думаю, что вы ошиблись:

 $this->db->join($this->accounts_table.'.email', $this->accounts_table.'.id = '.$this->profiles_table.'.user_id');

Первый параметр, если таблица НЕ поле: $this->accounts_table.'.email' неверно ИМХО. Или только опечатка:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...