colonne inconnue mySql
-
06-07-2019 - |
Question
J'ai la requête suivante
SELECT
s.name,
s.surname,
s.id_nr,
s.student_nr,
s.createdate,
s.enddate,
(SELECT count(*) FROM Student_Attendance WHERE absent = 1) AS count_absent
FROM
Student AS s,
Student_Contact AS sc,
Student_Payment AS p,
Student_Courses AS scou,
Modules AS m,
Student_Certificate AS scer,
Student_Results AS sr,
Lecturer_Profile AS l,
Lecturer_Comments AS lc,
Student_Attendance AS sa,
Student_Training AS t
WHERE s.s_id = sc.s_id
AND s.s_id = p.s_id
AND s.s_id = scou.s_id
AND scou.c_id = m.c_id
AND s.s_id = scer.s_id
AND s.s_id = sr.s_id
AND s.s_id = lc.s_id
AND lc.l_id = l.l_id
AND s.s_id = sa.s_id
AND LOWER(s.name) = 'andile'
AND LOWER(s.surname) = ' orson vulture'
AND s.id_nr = 8403125062671
AND LOWER(sc.race) = 'white'
AND sc.gender = 1
AND LOWER(sc.area) = 'gauteng'
AND p.payment_type = 1
AND s.student_nr = 203087506
AND scou.c_id = 1 AND sc.age = 23
AND scer.certificate_number = 3424234
AND sr.result = 32
AND l.l_id= 1
AND count_absent = 3
AND LOWER(s.branch) = 'pretoria'
AND LOWER(s.campus_name) = 'pretoria'
AND LOWER(sc.kin_name) = 'self'
AND t.s_id = s.s_id
AND t.sp_id = 1
et j'obtiens l'erreur suivante
CDbCommand failed to execute the SQL statement: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'count_absent' in 'where clause'
Je ne sais pas comment résoudre ce problème car la colonne est dans l'instruction select
La solution
votre colonne dérivée count_absent est traitée dans la clause SELECT, qui est traitée APRÈS la clause WHERE, et n'est donc pas disponible. Il serait disponible si vous englobiez toute la requête dans un SELECT externe pour pouvoir accéder à la colonne dérivée.
c'est-à-dire
select * from (
SELECT
s.name,
s.surname,
s.id_nr,
s.student_nr,
s.createdate,
s.enddate,
(SELECT count(*) FROM Student_Attendance WHERE absent = 1) AS count_absent
FROM
Student AS s,
Student_Contact AS sc,
Student_Payment AS p,
Student_Courses AS scou,
Modules AS m,
Student_Certificate AS scer,
Student_Results AS sr,
Lecturer_Profile AS l,
Lecturer_Comments AS lc,
Student_Attendance AS sa,
Student_Training AS t
WHERE s.s_id = sc.s_id
AND s.s_id = p.s_id
...
AND t.s_id = s.s_id
AND t.sp_id = 1
) as x where count_absent = 3
Autres conseils
Je ne suis pas sûr de ce que vous essayez d'accomplir ici, mais notez que la requête intégrée qui donne count_absent n'utilise aucun autre critère que "absent" = 1 ". Ainsi, peu importe l'étudiant que vous consultez, vous obtiendrez toujours le nombre total d'enregistrements d'assistante d'élèves avec absent = 1. Je pense que vous voulez limiter cela aux enregistrements d'assistante d'élèves pour l'élève sélectionné.
Vous pouvez également rechercher le " rejoindre " clause. Cela rendrait vos requêtes beaucoup plus faciles à comprendre, puis l'ancien style se joint à où.