Hallo zusammen!
Ich habe hier einen Query der mir aus einer Tabelle die aktuellsten Datensätze rausholt. Der Funktioniert prima, aber jetzt will ich etwas hinzufügen und das funzt irgendwie überhaupt nicht wie erwartet.
Also ich fang mal an, mit kommentaren im query
SELECT
SQL\_CALC\_FOUND\_ROWS
t1.current\_year, -- Datensätze können jedes Jahr aktualisiert werden
t1.pl\_id, -- Das ist die ID die jeder Datensatz über alle Jahre behält
t1.name, -- Der Name des Eintrags
e.name, -- Der Name des Editors, also demjenigen der diesem Datensatz zugeordnet ist und ihn bearbeiten darf
e.role -- Die "Rolle" des Editors, das Feld ist ein enum('client', 'extern\_user', 'intern\_user', 'extern\_manager', 'intern\_manager', 'admin')
FROM
data AS t1
LEFT OUTER JOIN editor\_pl\_ids AS t\_e\_c ON t1.pl\_id = t\_e\_c.pl\_id -- wir holen die Zuordnung der Editoren zu den Datensätzen. Hier kann es nun passieren das es für einen Datensatz zwei Editoren gibt. Einmal mit der Rolle "Client" und einmal mit z.B. "intern\_user"
LEFT OUTER JOIN editors AS e ON e.uid = t\_e\_c.editor\_id -- Holen wie der Editor überhaupt heißt und welche Rolle er hat
WHERE
intern\_geloescht != 'ja' -- So werden Datensätze als gelöscht markiert
AND current\_year =
( -- Dieser Subselect wirft alle Datensätze raus, die nicht im aktuellsten Jahr sind, weil nicht garantiert ist das jeder Datensatz jedes Jahr aktualisiert wird.
SELECT
MAX(current\_year)
FROM
data AS t2
WHERE
t1.pl\_id = t2.pl\_id
)
-- so hier kommt der Knackpunkt! Ohne das AND role != 'client' funzt der Query gut, außer das Natürlich jeder Datensatz so oft im Ergebnis auftaucht wie es Einträge dazu im Table editor\_pl\_ids gibt. Und genau das will ich verhindern, denn alle Editoren mit der Rolle "Client" sind unwichtig.
-- Das Problem ist, das jeder Versuch mit AND role IS NOT LIKE 'client' oder AND e.role 1 zu einem leeren Ergebnis führt! Warum???
-- das einzige das zu sinnvollen, aber nutzlosen, Ergebnissen führt ist:
AND role IS NULL
ORDER BY
pl\_id
LIMIT
1000, 25
So ich will jetzt also statt dem „AND role IS NULL“ eigentlich ein „AND role != ‚client‘“ haben, aber das führt eben zu einem leeren Ergebnis, obwohl doch zumindest mal die Datensätze auftauchen müßten, wo role leer ist, weil es in editor_pl_ids keinen Eintrag dazu gibt, oder?
Zur Arbeitsumgebung: die Entwicklermaschine läuft auf MySQL 5.0.33 (Windoze), das wo es dann mal laufen sollte bisher MySQL 4.1.irgendwas, kann aber auch auf 5.0 umsteigen.
Ich bin über jeden Rat dankbar.
Grüße
A. Hofmann