Einzelnen Beitrag anzeigen

Benutzerbild von _frank_
_frank_

Registriert seit: 21. Feb 2003
Ort: Plauen / Bamberg
922 Beiträge
 
Delphi 3 Professional
 
#3

Re: [MySQL] Select und Feld für neues Select verwenden

  Alt 5. Sep 2009, 17:30
Hallo Omata (und alle die ich verschreckt habe)

erstmal danke für den Versuch, mich zu verstehen

Zitat von omata:
Also es ist sehr schwer dir zu helfen, weil man aus deinen Infos irgendwie nicht schlau wird (zumindest ich, sorry bin eben einfach doof)
hab ich schon befürchtet, ist aber auch blöd zu erklären, da das Ganze recht komplex aufgebaut ist.
Zitat von omata:
Was ist das für ein Statement? Wieso heißen hier die Tabellen #__eventusers , #__users? Und lass bitte diese völlig überflüssigen und in ihrer Funktion nur negativ wirkenden Hochkommata weg!
#__eventusers ist die user-tabelle,#__users die login-tabelle (brauche ich nur, um mir die email zu holen). das #_ ist ein platzhalter, da das ganze innerhalb von Joomla läuft.
die login-tabelle ist nicht von mir, die nutze ich nur.
prinzipiell läuft es so, dass ich in meiner usertabelle die Login_id (also die ID in der login-tabelle) als Verbindungsreferenz speichere. das o.g. Select könnte man auch mit einem LeftJoin machen.

die Hochkommata hab ich mir angewöhnt, weils phpmyadmin auch so macht
Zitat von omata:
Was ist jetzt bitte der Mail...-Gedöhns?
Soetwas ist kein Beispiel, lass es lieber weg, damit verschreckt du alle, die dir helfen wollen.
das "Mail_".$Parameter ist der wert, der für die Art der Benachrichtigung steht, deswegen hab ich geschrieben "all" und "own" ist vereinfacht. die werte heißen z.b. Mail_Create_Event und Mail_Modify_Event als Beispiele für "all" und für Own würde der erste z.b. Mail_Own_Modify_Event heißen.
Zitat von omata:
Was soll der Teil mit "und der event-id haben"? Wie soll das gehen? Hast du in 'users' noch eine EventID gespeichert?
gut, also mal eine auflistung aller beteiligten Tabellen, hoffe es wird dann ein bisschen klarer

Users=Login-Tabelle (nicht von mir)
Eventusers=Benutzertabelle der Benutzer für die Einsätze (Login_ID=>Users.ID), hier ist das "Notification-Feld"
Events=Tabelle der Einsätze (Pro einsatz ein Datensatz)
EventHelper=zuordnung der Einsatzkräfte zu den Einsätzen (Helper_ID=>Eventusers.ID,Event_ID=>Events.ID)
Zitat von omata:
Für mich ganz und gar nicht, sorry.

Trotzdem versuche ich dir zu helfen, auch wenn es Schwerstarbeit ist...

SQL-Code:
SELECT *
FROM users
WHERE notification = 'all
   OR ( notification = 'own
       AND EXISTS (SELECT *
                   FROM events
                   WHERE login_id = u.id))
Warum muss du unbedingt FIND_IN_SET benutzen?
Was sollte ich alternativ nutzen um Sets auseinanderzunehmen? vom Prinzip her ists schon fast richtig, siehe unten meine statements. das Problem ist der querverweis (welche benutzer wollen infomiert werden => sind sie dem Einsatz zugeordnet).
Zitat von omata:
Mein Vorschlag ist vermutlich nur blödsinn, sorry, wenn das so sein sollte und dann bitte einfach ignorieren.
Vielleicht kann dir dann jemand anderes helfen.
das Exists wrde ich mir mal anschauen, müsste nur auf die Eventhelper angewendet werden, wo die ID des gefundenen Benutzers aus der Eventusers (anhand der Notification) zusammen mit der Event_ID in der Eventhelper gesucht werden muss.

mal ein bisschen pseudocode, um das bisschen zu enträtseln
das Problem ist $helperid, weil ich die mir aus der eventusers holen müsste (unteres Statement), geht aber nur, indem ich beide selects zusammenbaue. es sind also beide selects voneinander abhängig.

SQL-Code:
SELECT * From EventHelper Where (Helper_ID='$helperid') AND (Event_ID=$eventid)
SELECT * FROM eventusers WHERE (Notification = "Mail_All") or ((Mail_Own) and (count(oberes select)>0))
Hoffentlich hab ich jetzt bisschen Licht ins Dunkel bringen können

Gruß Frank
  Mit Zitat antworten Zitat