CodeIgniter MySQL запрос не работает - PullRequest
6 голосов
/ 29 января 2011

Я пытаюсь заставить этот запрос работать в CodeIgniter, но он выдает ошибку:

Произошла ошибка базы данных Номер 1096

Таблицы не используются

ВЫБРАТЬ *

Если я помещаю запрос непосредственно в MySQL, он работает нормально (я заменяю переменные $ значениями). Вот запрос в качестве ввода в codeigniter:

$this->db->query(" 
    SELECT * 
    FROM writing_quests 
    LEFT OUTER JOIN members_quests_completed 
    ON members_quests_completed.quest_id = writing_quests.id 
    WHERE writing_quests.level_required <=  $userlevel 
    AND ( 
        members_quests_completed.user_id = $user_id
        OR 
        members_quests_completed.user_id IS NULL )"
);
$query = $this->db->get();

Я делаю что-то не так и мне это не хватает? Я включил весь вызов функции на случай, если проблема в другом месте? Я делал это точно много раз без проблем.

function get_all_quests_for_user() {
    $user_id = $this->session->userdata('user_id');
    $userlevel = $this->session->userdata('user_level');

    $this->db->query("SELECT writing_quests.id, writing_quests.points_availible, writing_quests.name, writing_quests.note, writing_quests.instructions, writing_quests.time_limit, members_quests_completed.location_completed, members_quests_completed.status  FROM writing_quests LEFT OUTER JOIN members_quests_completed ON members_quests_completed.quest_id = writing_quests.id WHERE writing_quests.level_required <=  '$userlevel' AND writing_quests.unlocked = 1 AND ( members_quests_completed.user_id = '$user_id' OR members_quests_completed.user_id IS NULL )");
    $query = $this->db->get();
    $this->db->last_query();
    return $query->result();
}

Ответы [ 2 ]

6 голосов
/ 29 января 2011

Я думаю, что это должно быть так:

$query = $this->db->query(" 
SELECT * 
FROM writing_quests 
LEFT OUTER JOIN members_quests_completed 
ON members_quests_completed.quest_id = writing_quests.id 
WHERE writing_quests.level_required <=  $userlevel 
AND ( 
    members_quests_completed.user_id = $user_id
    OR 
    members_quests_completed.user_id IS NULL )"
);

Или:

$query = $this->db->get('mytable');
5 голосов
/ 29 января 2011
SELECT writing_quests.*, ( put needed fields from members_quests_completed ) 
FROM writing_quests
LEFT JOIN members_quests_completed ....

одинаковые имена полей искажают имена столбцов результатов в объекте результатов

К вашему сведению, не рекомендуется использовать *, у вас должен быть список полей ...
и что самое важное:

$result = $this->db->query ( ... );

$ this-> db-> query (...) хорошо при INSERT или UPDATE (в основном), когда вы вытягиваете данные, присваиваете результаты переменной: http://codeigniter.com/user_guide/database/results.html

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