Group by mit Priorität

xbtequila

Grünschnabel
Guten Tag,

Ich Probleme eine Abfrage zu formulieren. Es handelt sich um eine Kalender Datenbank.
Es gibt eine Benutzertabelle mit den üblichen Benutzderdaten (kal_user), eine Termintabelle mit den Zeiten und angaben über den Termin sowie ein Feld, das den Termineigentümer enthält, welches mit der Benutztabelle verknüpft ist. Die Termine werden den Benutzern über eine Zwischentabelle zugeordnet, da jeder Termin mehrere n Benutzern zugeordnet sein kann und umgekehrt. Jeder kann seine eigenen Termine eintragen (Termineigentümer der Termintabelle und die Benutzerzuordnung in der Zwischentabelle ist gleich) oder man kann einen Termin von einem anderen Benutzer eingetragen bekommen (Der Termineigentümer in der Benutzertabelle ist ein anderer als in der Zuordnungstabelle).

In der Abfrage möchte ich jetzt alle Termine in einem bestimmten Zeitraum abfragen, aber nicht nur von dem aktuellen Benutzer, sondern auch von anderen Benutzern.

Jetzt zu meinem Problem:

Da jeder Termin mehreren Benutzern zugeordnet werden kann, gibt es Termine, die für mich als Abfragenden eigene Termine, die ich selber eingetragen habe und wenn ich dann in der selben abfrage noch die Termine eines anderen Benutzers abfrage, der auch dem selben Termin zugeordnet ist kann ich mit meiner abfrage nicht feststellen, ob es sich jetzt um meinen Termin oder einen Fremden Termin handelt.

Ich bräuchte also eine Abfrage, die folgendes macht:
Alle Termine von mir UND weiteren Benutzern abfragen.
Die Termine jeweils dem Benutzer zuordnen ABER die Termine mir zuordnen wenn mein Benutzer mit diesem Termin verknüpft ist.

zzt. wird die Zuordnung nicht sortiert und der Termin wird dem ersten gefunden Benutzer zugeordnet, auch wenn der Termin mit mir verknüpft ist.

Hier ist meine MySQL Abfrage:

Code:
select * from kal_termine as t, kal_user as u, kal_user_termine as ut where ter_date_start>='2006-07-17' and	t.ter_date_ende<'2007-07-24' and ut.kut_user=u.usr_pid
and ut.kut_termin=t.ter_pid and (u.usr_pid=1 or u.usr_pid=2) group by t.ter_pid order by t.ter_date_start asc

Ich hoffe jemand kann mir helfen.

Danke
 
Hallo,

ich habe es selber mal so gemacht:

Mit UNION

(
SELECT * , 1 AS x
FROM kal_termine AS t, kal_user AS u, kal_user_termine AS ut
WHERE ter_date_start >= '2006-07-17'
AND t.ter_date_ende < '2007-07-24'
AND ut.kut_user = u.usr_pid
AND ut.kut_termin = t.ter_pid
AND u.usr_pid =1
GROUP BY t.ter_pid
ORDER BY t.ter_date_start ASC
)
UNION (

SELECT * , 2 AS x
FROM kal_termine AS t, kal_user AS u, kal_user_termine AS ut
WHERE ter_date_start >= '2006-07-17'
AND t.ter_date_ende < '2007-07-24'
AND ut.kut_user = u.usr_pid
AND ut.kut_termin = t.ter_pid
AND u.usr_pid =2
GROUP BY t.ter_pid
ORDER BY t.ter_date_start ASC
)
ORDER BY x ASC

Gruß
 
Zurück