2011-01-29 23 views
6

Estoy intentando conseguir esta consulta para trabajar en CodeIgniter pero está escupiendo un error:CodeIgniter MySQL consulta no trabaja

A Database Error Occurred Error Number: 1096

No tables used

SELECT *

Si pongo la consulta directamente en MySQL que funciona bien (puedo reemplazar el $ variables con valores). Ésta es la consulta como entrada en 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(); 

estoy haciendo algo que está mal y lo que me falta? He incluido toda la llamada de función en caso de que el problema sea en otro lugar? He hecho esto exactamente muchas veces sin ningún problema.

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(); 
} 
+1

Quizás 'consulta de CI()' método no le gustan los saltos de línea. – BoltClock

+0

Gracias BoltClock. Lo he probado atualmente sin. También tengo consultas escritas con saltos de línea que sí funcionan. – JoeM05

Respuesta

5
 
SELECT writing_quests.*, (put needed fields from members_quests_completed) 
FROM writing_quests 
LEFT JOIN members_quests_completed .... 

mismos campos que corrompen nombres nombres resultados de las columnas de objeto de resultado

FYI no aconsejable utilizar *, usted debe tener lista de campos ...
y lo que es más importante:

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

$ this-> db-> query (...) es bueno cuando INSERT o UPDATE (en su mayoría), cuando los datos que tiran asigna a la variable de resultados: http://codeigniter.com/user_guide/database/results.html

+0

Agregó una lista de campos, el mismo resultado, el mismo error. Esto funciona bien en la línea de comandos mysql. – JoeM05

+0

funcionará bien con mysql – bensiu

+0

sí, funciona bien en mysql. Es por eso que estoy tan confundido. – JoeM05

6

creo que debe ser así:

$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)" 
); 

O:

$query = $this->db->get('mytable'); 
+0

La opción 1 parecía funcionar. ¡Gracias! – JoeM05