Hallo guten Abend,
ich hoffe, jemand kann mir bei meinem Problem weiterhelfen. Für den Fall, dass sich jemand am Umfang dieses Post's stört, dem sei gesagt, dass ich sonst nicht weiß, wie ich einem Fachmann mein Problem beschreiben soll
Ich lasse mir über ein Suchformular Praxislisten erstellen, deren Auswahlkriterien ich über ein Formular definiere. Das Ganze ist bereits im Einsatz und funktioniert auch so wie gewünscht (siehe unten).
Bis dato wurden die angeforderten Praxisdaten aus der Tabelle ‚praxen‘ gezogen. Alle Praxen in der Tabelle ‚praxen‘ sind mit nur einer fachrichtungen_id notiert
Tabelle ‚praxen‘
Nun habe ich eine neue Tabelle erstellt ‚praxen_diverse_fachrichtungen_id ‘.
In dieser Tabelle liste ich z.B. Kliniken oder die Praxen auf, die mehrere Fachrichtungen im Haus haben.
Tabelle ‚praxen_diverse_fachrichtungen_id‘
Mein Problem verdeutliche ich besten an diesem Beispiel:
Ich will mir alle Praxen der Fachrichtung Neurologie ( fachrichtungen_id = 23) anzeigen lassen. Bei meiner bisherigen Vorgehensweise hat er mir auch alle neurologischen Praxen korrekt aufgelistet, die in der Tabelle ‚praxen‘ mit der entsprechenden ‚fachrichtungen_id‘ gespeichert sind.
Nun sollen mit dieser einen Abfrage zugleich auch die Kliniken angezeigt werden, die in der Tabelle ‚praxen_diverse_fachrichtungen_id ‘ gelistet sind und einen Eintrag ‚fachrichtungs_id‘ für Neurologie (23) aufweisen.
Einzeln würde ich das so abfragen, steht aber hier nicht zur Debatte:
Mein Problem ist nun, dass ich nicht weiß, wie und wo ich die Abfrage in meine bisherige Abfrage korrekt einbaue.
So sieht meine funktionsfähige Abfrage zur Zeit aus:
Die Unterabfrage (egal ob mit IN oder =) funktioniert nicht, weil es mehr als ein Ergebnis gibt (MySQL meldet:#1241 - Operand should contain 1 column(s), bei einem anderen Versuch zeigte er mir nur die Praxen, deren praxis_id in beiden Tabellen zu finden sind. Wenn das mit EXISTS funktionieren könnte, weiß ich eben nicht, wo und wie das einzubauen ist. Kann mir jemand helfen? Gruß Marie
ich hoffe, jemand kann mir bei meinem Problem weiterhelfen. Für den Fall, dass sich jemand am Umfang dieses Post's stört, dem sei gesagt, dass ich sonst nicht weiß, wie ich einem Fachmann mein Problem beschreiben soll
Ich lasse mir über ein Suchformular Praxislisten erstellen, deren Auswahlkriterien ich über ein Formular definiere. Das Ganze ist bereits im Einsatz und funktioniert auch so wie gewünscht (siehe unten).
Bis dato wurden die angeforderten Praxisdaten aus der Tabelle ‚praxen‘ gezogen. Alle Praxen in der Tabelle ‚praxen‘ sind mit nur einer fachrichtungen_id notiert
Tabelle ‚praxen‘
praxis_id | fachrichtungen_id |
5 | 1 |
8 | 23 |
9 | 26 |
11 | 23 |
14 | 15 |
15 | 12 |
16 | 11 |
In dieser Tabelle liste ich z.B. Kliniken oder die Praxen auf, die mehrere Fachrichtungen im Haus haben.
Tabelle ‚praxen_diverse_fachrichtungen_id‘
praxis_id | fachrichtungen_id |
999 | 1 |
999 | 23 |
99 | 26 |
77 | 23 |
77 | 15 |
77 | 12 |
77 | 11 |
44 | 23 |
44 | 15 |
Mein Problem verdeutliche ich besten an diesem Beispiel:
Ich will mir alle Praxen der Fachrichtung Neurologie ( fachrichtungen_id = 23) anzeigen lassen. Bei meiner bisherigen Vorgehensweise hat er mir auch alle neurologischen Praxen korrekt aufgelistet, die in der Tabelle ‚praxen‘ mit der entsprechenden ‚fachrichtungen_id‘ gespeichert sind.
Nun sollen mit dieser einen Abfrage zugleich auch die Kliniken angezeigt werden, die in der Tabelle ‚praxen_diverse_fachrichtungen_id ‘ gelistet sind und einen Eintrag ‚fachrichtungs_id‘ für Neurologie (23) aufweisen.
Einzeln würde ich das so abfragen, steht aber hier nicht zur Debatte:
PHP-Code:
SELECT
pdf.praxis_id, pdf.fachrichtungs_id
FROM praxen_diverse_fachrichtungen_id pdf
WHERE pdf.fachrichtungs_id = 23
Mein Problem ist nun, dass ich nicht weiß, wie und wo ich die Abfrage in meine bisherige Abfrage korrekt einbaue.
So sieht meine funktionsfähige Abfrage zur Zeit aus:
PHP-Code:
SELECT
p.id, p.name AS name, p.ort, p.fachrichtung, p.praxistyp,
p.gesperrt,
f.name AS fname,
t.name AS praxistyp,
k.kvname,
(SELECT GROUP_CONCAT(a.titel, a.name SEPARATOR '<br> ') FROM aerzte a WHERE p.id = a.praxis_id) AS aerzte,
a.praxis_id, a.anrede AS aanrede,
m.praxen_id, m.post AS postmailing, m.fax AS faxmailing, m.email AS emailmailing, m.veranstaltungen_uebersicht, m.veranstaltungen_id
FROM praxen p
LEFT JOIN fachrichtungen f ON f.id = p.fachrichtung
LEFT JOIN praxen_typus t ON praxistyp = t.id
LEFT JOIN praxen_kvbezirk k ON kvpraxis = k.id
LEFT JOIN aerzte a ON p.id = a.praxis_id
JOIN (SELECT praxen_id, MAX(datum) AS datum, post, fax, email, veranstaltungen_uebersicht, veranstaltungen_id
FROM mailing GROUP BY praxen_id) m ON m.praxen_id = p.id
WHERE p.fachrichtung = 23
Die Unterabfrage (egal ob mit IN oder =) funktioniert nicht, weil es mehr als ein Ergebnis gibt (MySQL meldet:#1241 - Operand should contain 1 column(s), bei einem anderen Versuch zeigte er mir nur die Praxen, deren praxis_id in beiden Tabellen zu finden sind. Wenn das mit EXISTS funktionieren könnte, weiß ich eben nicht, wo und wie das einzubauen ist. Kann mir jemand helfen? Gruß Marie
PHP-Code:
SELECT
p.id, p.name AS name, p.name_zusatz, p.ort, p.stadtteil, p.kvpraxis, p.plz, p.faxv, p.fax, p.email, p.fachrichtung, p.praxistyp,
p.gesperrt,
f.name AS fname,
t.name AS praxistyp,
k.kvname,
// ###########################
(SELECT pdf.praxis_id, pdf.fachrichtungen_id FROM praxen_diverse_fachrichtungen_id pdf where pdf.fachrichtungen_id IN ('23')) AS zusaz ,
// ###########################
(SELECT GROUP_CONCAT(a.titel, a.name SEPARATOR '<br> ') FROM aerzte a WHERE p.id = a.praxis_id) AS aerzte,
a.praxis_id, a.anrede AS aanrede,
m.praxen_id, m.post AS postmailing, m.fax AS faxmailing, m.email AS emailmailing, m.veranstaltungen_uebersicht, m.veranstaltungen_id
FROM praxen p
LEFT JOIN fachrichtungen f ON f.id = p.fachrichtung
LEFT JOIN praxen_typus t ON praxistyp = t.id
LEFT JOIN praxen_kvbezirk k ON kvpraxis = k.id
LEFT JOIN aerzte a ON p.id = a.praxis_id
JOIN (SELECT praxen_id, MAX(datum) AS datum, post, fax, email, veranstaltungen_uebersicht, veranstaltungen_id
WHERE p.fachrichtung = 23
Kommentar