mySql bilinmeyen kolon

2 Cevap php

Ben aşağıdaki sorgu var

    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

ve ben aşağıdaki hatayı alıyorum

CDbCommand failed to execute the SQL statement: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'count_absent' in 'where clause'

Sütunu select deyiminde olduğu bu çözmek için nasıl bilmiyorum

2 Cevap

türetilmiş sütun count_absent WHERE yan tümcesi SONRA işlenir SELECT yan tümcesinde, işlenmiş, ve böylece mevcut bu yüzden değildir. Eğer bir dış SELECT tüm sorguyu sarılmış eğer türetilmiş sütun erişebilir olması için, kullanılabilir olacaktır.

yani

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

Burada gerçekleştirmek için çalışıyoruz ne emin değilim, ama count_absent verir gömülü sorgu "= 1 yok" dışında hiçbir kriter kullandığını unutmayın. Bu yüzden bakıyoruz olan öğrenci fark etmez, her zaman eksik = 1 tüm student_attendance kayıtların sayısını elde edecek. Ben seçilen öğrenci için student_attendance kayıtlarına bu sınırlamak istiyor sanıyorum.

Ayrıca, "katılmak" maddesini incelemek olabilir. Bu daha sonra eski stil nerede ile katılma mantıklı için sorgular çok daha kolay olacaktır.