2016-06-10 19 views
-2

Ich habe bereits verschiedene Lösungen ausprobiert, aber es gibt mir immer noch den unten angezeigten Fehler - ich habe keine Ideen (Ich habe auch versucht, die ". $ _ SESSION [' plz '] „- Teil mit einer einfachen Zahl, aber alles hat sich nicht geändert:.Unbekannte Spalte in Feldliste (PHP + MySQL/PDO)

$profilequery = "SELECT teacher.teacher_id, teacher.plz, teacher.ort, 
teacher.teacherprename, teacher.teachername, hours_week.hours_week, teacher.day_times, 
teacher.grade, teacher.study, teacher.references, teacher_subjects.qualification, 
teacher_subjects.subjectgrade, teacher_subjects.subjectqualification, 
ABS (teacher.plz - ".$_SESSION['plz'].") AS distance FROM (
(
SELECT teacher.teacher_id, teacher.plz, teacher.ort, 
teacher.teacherprename, teacher.teachername, hours_week.hours_week, teacher.day_times, 
teacher.grade, teacher.study, teacher.references, teacher_subjects.qualification, 
teacher_subjects.subjectgrade, teacher_subjects.subjectqualification FROM teacher LEFT JOIN 
teacher_subjects 
ON 
teacher.teacher_id = teacher_subjects.teacher_id 
LEFT JOIN 
hours_week 
ON 
teacher.hours_id = hours_week.hours_id WHERE teacher.plz >= '".$_SESSION['plz']."' 
AND teacher_subjects.status_id = '1' ORDER BY teacher.plz LIMIT 10 
) UNION ALL (
SELECT teacher.teacher_id, teacher.plz, teacher.ort, 
teacher.teacherprename, teacher.teachername, hours_week.hours_week, teacher.day_times, 
teacher.grade, teacher.study, teacher.references, teacher_subjects.qualification, 
teacher_subjects.subjectgrade, teacher_subjects.subjectqualification FROM teacher LEFT JOIN 
teacher_subjects 
ON 
teacher.teacher_id = teacher_subjects.teacher_id 
LEFT JOIN 
hours_week 
ON 
teacher.hours_id = hours_week.hours_id WHERE teacher.plz >= '".$_SESSION['plz']."' 
AND teacher_subjects.status_id = '1' ORDER BY teacher.plz LIMIT 10 
) 
) AS a 
ORDER BY distance 
LIMIT 10"; 

Und es wirft mich dies:

Spalte nicht gefunden: 1054 Unknown column 'plz' in 'Feldliste' 'in.

Ich sehe hier wirklich nichts falsch, hat vielleicht jemand eine Vorstellung davon, was für das Problem verantwortlich sein könnte? Ich bin dankbar für jede Hilfe!

EDIT: Der "Lehrer" gelöscht. und "teacher_subjects". Teil in den Abfragen (auch nur versucht, es in der Hauptabfrage zu löschen oder die Unterabfragen):

$profilequery = "SELECT teacher_id, plz, ort, 
teacherprename, teachername, hours_week, day_times, 
grade, study, references, qualification, 
subjectgrade, .subjectqualification, 
ABS (teacher.plz - ".$_SESSION['plz'].") AS distance FROM (
(
SELECT teacher_id, plz, ort, 
teacherprename, teachername, hours_week, day_times, 
grade, study, references, qualification, 
subjectgrade, .subjectqualification FROM teacher LEFT JOIN 
teacher_subjects 
ON 
teacher.teacher_id = teacher_subjects.teacher_id 
LEFT JOIN 
hours_week 
ON 
teacher.hours_id = hours_week.hours_id WHERE teacher.plz >= '".$_SESSION['plz']."' 
AND teacher_subjects.status_id = '1' ORDER BY teacher.plz LIMIT 10 
) UNION ALL (
SELECT teacher_id, plz, ort, 
teacherprename, teachername, hours_week, day_times, 
grade, study, references, qualification, 
subjectgrade, .subjectqualification FROM teacher LEFT JOIN 
teacher_subjects 
ON 
teacher.teacher_id = teacher_subjects.teacher_id 
LEFT JOIN 
hours_week 
ON 
teacher.hours_id = hours_week.hours_id WHERE teacher.plz >= '".$_SESSION['plz']."' 
AND teacher_subjects.status_id = '1' ORDER BY teacher.plz LIMIT 10 
) 
) AS a 
ORDER BY distance 
LIMIT 10"; 

Und es wirft dies:

Integrität Einschränkungsverletzung: 1052 Spalte ‚lehrer_id‘ in Feldliste ich denke, es etwas zu tun mit der LEFT JOIN Teil (bevor es mit nur Auswahl plz und lehrer_id mit diesem Teil gearbeitet. ich habe auch versucht, das Putting LEFT JOIN Teil ist nicht eindeutig

Jetzt das letzte Ende (nach dem Teil ALL UNION), aber es wirft immer noch einen Fehler auf.

EDIT 2: Gelöst es! -> hatte die Abfragen zu geben sowie die LEFT JOIN s eindeutige Namen (as b usw.) und dann beziehen sich auf sie richtig ->

$profilequery = "SELECT n.teacher_id, n.plz, n.ort, 
n.teacherprename, n.teachername, n.hours_week, n.day_times, 
n.grade, n.study, n.qualification, 
n.subjectgrade, n.subjectqualification, 
ABS (n.plz - ".$_SESSION['plz'].") AS distance FROM (
(
SELECT b.teacher_id, b.plz, b.ort, 
b.teacherprename, b.teachername, sw.hours_week, b.day_times, 
b.grade, b.study lf.qualification, 
lf.subjectgrade, lf.subjectqualification FROM teacher as b LEFT JOIN 
teacher_subjects as lf 
ON 
teacher.teacher_id = teacher_subjects.teacher_id 
LEFT JOIN 
hours_week as sw 
ON 
b.hours_id = sw.hours_id WHERE b.plz >= '".$_SESSION['plz']."' 
AND lf.status_id = '1' ORDER BY b.plz LIMIT 10 
) UNION ALL (
SELECT b.teacher_id, b.plz, b.ort, 
b.teacherprename, b.teachername, sw.hours_week, b.day_times, 
b.grade, b.study lf.qualification, 
lf.subjectgrade, lf.subjectqualification FROM teacher as b LEFT JOIN 
teacher_subjects as lf 
ON 
teacher.teacher_id = teacher_subjects.teacher_id 
LEFT JOIN 
hours_week as sw 
ON 
b.hours_id = sw.hours_id WHERE b.plz >= '".$_SESSION['plz']."' 
AND lf.status_id = '1' ORDER BY b.plz LIMIT 10 
) 
) AS n 
ORDER BY distance 
LIMIT 10"; 

Antwort

0

Siehe aktualisiert Beitrag oben (EDIT 2) -> hatte die Abfragen als auch zu geben, wie die LINKE eindeutige Namen JOIN (als b usw.) und dann auf sie verweisen richtig

1

Ihre Subqueries anhängen muss plz Spalte oder es wird nicht in Haupt-Abfrage zu sehen ist, so:

$profilequery = "SELECT teacher_id, ABS (plz - ".$_SESSION['plz'].") AS distance FROM (
(
SELECT teacher_id, plz FROM teacher WHERE plz >= '".$_SESSION['plz']."' ORDER BY teacher.plz LIMIT 10 
) UNION ALL (
SELECT teacher_id, plz FROM teacher WHERE plz >= '".$_SESSION['plz']."' ORDER BY plz DESC 
LIMIT 10 
) 
) AS a 
ORDER BY distance 
LIMIT 10"; 
+0

Vielen Dank viel ! Dies löste das Problem meines Schnipsel, ich habe vergessen, die "PLZ" dort aufzunehmen. Ich habe immer noch den gleichen Fehler in meiner ursprünglichen Abfrage und es enthält auch "plz" in den Unterabfragen :(. Ich werde es oben posten, vielleicht haben Sie auch eine Idee dafür? Trotzdem, danke! Und ja, ich bin wirklich nicht (noch): <. – Franky2207

+1

Ihre neue Abfrage ist sehr seltsam, warum haben Sie SELECT SELECT nacheinander? Es sollte ein Fehler sein. Und warum in Ihrer Hauptabfrage benutzen Sie 'teacher.plz' und so weiter? Hauptabfrage ist von Unterabfragen und es sollte nur Spaltennamen 'PLZ' oder Alias' a.plz' geben – nospor

+0

Nochmals vielen Dank (!), ich werde das morgen umgestalten.Um ehrlich, ich habe nie zuvor Unterabfragen und die Unterabfragen verwendet mit der ALL UNION war ein Tipp, den ich von einer anderen Seite übernommen habe - im Grunde wollte ich nur den ABS-Teil für die Auswahl der nächsten PLZ verwenden, und der ALL UNION-Teil einschließlich der Unteranfragen dient der Verbesserung der Leistung entsprechend der Seite ein Tippfehler - sorry! – Franky2207

Verwandte Themen