Ich habe eine Tabelle mit Status.mysql wählen Sie die Standardwerte aus der Tabelle, wenn keine benutzerspezifischen gefunden werden
ID UserID StatusID Description
1 0 0 ready
2 0 1 on hold
3 0 2 cancelled
4 3 1 waiting
5 3 2 deleted
6 3 4 waiting on supplier
7 4 5 postponed
etc ...
UserID 0 hält meine Standard-Beschreibungen. Ich möchte den gesamten Status-Text für einen Benutzer und die Standardwerte herausziehen, wenn es keine Benutzerwerte mit der gleichen Status-ID gibt. zB Benutzer-ID 3 zurückkehren sollte
ID UserID StatusID Description
1 0 0 ready
4 3 1 waiting
5 3 2 deleted
6 3 4 waiting on supplier
zB Benutzer-ID 4 zurückgeben sollte
ID UserID StatusID Description
1 0 0 ready
2 0 1 on hold
3 0 2 cancelled
7 4 5 postponed
Benutzer-ID 7 sollte
ID UserID StatusID Description
1 0 0 ready
2 0 1 on hold
3 0 2 cancelled
so weit ich habe diese zurück:
select description.* from status_description description
join (
select max(id) as maxid from (
select * from status_description default where default.user_id = 0
union
select * from status_description userstatus where ectfsa.user_id = 67
) as subset
group by subset.ID
) as newest_desc on newest_desc.maxid = description.id
order by StatusID asc;
Wo ich Union Sowohl die Benutzerstatus als auch die Standardstatus und dann verbinden die maximale ID pro StatusID mit der ursprünglichen Tabelle, um den Benutzer und die Standardwerte abzurufen.
Das funktioniert gut, bis jemand einen neuen USERID0-Status mit einer höheren ID hinzufügt. Eg wir entscheiden, dass alle Benutzer nun die Möglichkeit von „verschoben“ haben sollte und wir eine Linie
ID UserID StatusID Description
8 0 5 next week
hinzufügen, die die gleiche „Status“ als „verschoben“ sein sollte, aber unterschiedlich für alle Benutzer formuliert, in welchem Benutzer-ID 4 hat .
Wenn es eine elegantere Möglichkeit gibt, dies zu tun, ohne Max zu verwenden und nur Standardwerte auszuwählen und Benutzerstatus hinzuzufügen, die Standardwerte überschreiben, wo sie bereits existieren?
Ich muss dies in mysql (dh nicht php), da es eine Verbindung zu einer anderen Abfrage sein wird, um benutzerspezifische Beschreibungen für einen anderen Bericht herauszuziehen.