kostenloser Webspace werbefrei: lima-city


MySQL nicht vorhandene JOINs

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    fabi755

    fabi755 hat kostenlosen Webspace.

    Hallo zusammen,

    ich habe ein MySQL Problem.

    Zur Situation:

    Ich habe 3 Tabellen:
    - Benutzer
    - Nachrichten
    - gesendet

    Die Benutzer Tabelle beinhaltet allgemeine Benutzerdaten, der Benutzername ist der Primärschlüssel.
    Die Tabelle Nachrichten beinhaltet Nachrichten, welche jeweils eine id (Primärschlüssel) haben
    Außerdem habe ich eine Tabelle gesendet (Positionstabelle), welche den Benutzernamen und die id der Nachricht beinhaltet.

    Mit JOINs kann ich im Großen und Ganzen umgehen. Jetzt habe ich aber das Problem, das ich z.B. alle Benutzer ausgeben möchte, die eine Nachricht noch nicht erhalten haben.

    Hat jemand eine Lösung oder einen Tipp, wie ich den ON und den WHERE Part schreibe?

    Vielen Dank!

    PS: Ein besserer Titel ist mir nicht eingefallen :confused:
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. Wenn ich das richtig verstanden habe, müsstest du Benutzer und gesendet left joinen und dann gucken wo die Nachrichten.id NULL ist.
  4. fabi755 schrieb:
    Hallo zusammen,

    ich habe ein MySQL Problem.

    Zur Situation:

    Ich habe 3 Tabellen:
    - Benutzer
    - Nachrichten
    - gesendet

    Die Benutzer Tabelle beinhaltet allgemeine Benutzerdaten, der Benutzername ist der Primärschlüssel.
    Die Tabelle Nachrichten beinhaltet Nachrichten, welche jeweils eine id (Primärschlüssel) haben
    Außerdem habe ich eine Tabelle gesendet (Positionstabelle), welche den Benutzernamen und die id der Nachricht beinhaltet.

    Mit JOINs kann ich im Großen und Ganzen umgehen. Jetzt habe ich aber das Problem, das ich z.B. alle Benutzer ausgeben möchte, die eine Nachricht noch nicht erhalten haben.

    Hat jemand eine Lösung oder einen Tipp, wie ich den ON und den WHERE Part schreibe?

    Vielen Dank!

    PS: Ein besserer Titel ist mir nicht eingefallen :confused:




    ist zwar nicht dein db Modell aber so kannste es bekommen:

    SELECT a.name, b.message , c.send 
    		FROM User a, message b, msgsend c
    		WHERE a.name = c.name  AND a.name = b.name and c.send = '1'
    		ORDER BY name


    wobei send ein Bool ist und primary key = name

    Beitrag zuletzt geändert: 7.6.2013 19:39:23 von n0tiert
  5. Autor dieses Themas

    fabi755

    fabi755 hat kostenlosen Webspace.

    seth93 schrieb:
    Wenn ich das richtig verstanden habe, müsstest du Benutzer und gesendet left joinen und dann gucken wo die Nachrichten.id NULL ist.


    Meintest du das so?
    SELECT * /* Nur für das Beispiel */
    FROM `Nachrichten`
    LEFT JOIN `gesendet`
    ON (`gesendet`.`Nachricht`=`Nachrichten`.`Id`)
    LEFT JOIN `Benutzer`
    ON (`Benutzer`.`Benutzername`=`gesendet`.`Benutzer`)
    WHERE `Nachrichten`.`Id` IS NULL;


    Daran hatte ich auch schon gedacht. Aber leider kommt dabei kein Ergebnis.



    n0tiert schrieb:

    ist zwar nicht dein db Modell aber so kannste es bekommen:

    SELECT a.name, b.message , c.send 
    		FROM User a, message b, msgsend c
    		WHERE a.name = c.name  AND a.name = b.name and c.send = '1'
    		ORDER BY name


    wobei send ein Bool ist und primary key = name


    Leider benötige ich gerade das genannte Model, da mich deine Struktur eingrenzen würde.

    Beitrag zuletzt geändert: 10.6.2013 15:29:04 von fabi755
  6. Deine Struktur sollste ja nicht verändern, und das sql sollte lediglich als ansatz dienen
    dump mal deine "struktur" mit 2-3 dummy einträgen , und poste die mal, dann kann ich später mal nachsehen.




    Beitrag zuletzt geändert: 10.6.2013 7:11:34 von n0tiert
  7. Autor dieses Themas

    fabi755

    fabi755 hat kostenlosen Webspace.

    Ich habe nun selbst noch eine Lösung gefunden:

    SELECT * /* Nur für das Beispiel */
    FROM `Benutzer`
    WHERE `Benutzer`.`Benutzername` NOT IN (
    	SELECT `gesendet`.`Benutzer`
    	FROM `gesendet`
    	LEFT JOIN `Nachrichten`
    	ON (`Nachrichten`.`Id`=`gesendet`.`Nachricht`)
    	WHERE `Nachrichten`.`Id`='2'
    );


    Ich habe es jetzt mit einem SubQuery gelöst, da es mir einfacher und sinnvoller erscheint. Ob es auch eine funktionierende Möglichkeit mit einem LEFT JOIN gibt weiß ich nicht.

    Quelle: http://stackoverflow.com/questions/8776668/mysql-query-select-where-id-does-not-exist-in-the-join-table

    n0tiert schrieb:
    Deine Struktur sollste ja nicht verändern, und das sql sollte lediglich als ansatz dienen
    dump mal deine "struktur" mit 2-3 dummy einträgen , und poste die mal, dann kann ich später mal nachsehen.


    Um das ganze nochmal zu veranschaulichen habe ich das ganze noch mal als HTML-Datei vorbereitet:
    http://fabi755.lima-city.de/sonstiges/forum/MySQL-nicht-vorhandene-JOINs/uebersicht.html

    Beitrag zuletzt geändert: 10.6.2013 15:29:36 von fabi755
  8. fabi755 schrieb:
    Ich habe nun selbst noch eine Lösung gefunden:

    SELECT * /* Nur für das Beispiel */
    FROM `Benutzer`
    WHERE `Benutzer`.`Benutzername` NOT IN (
    	SELECT `gesendet`.`Benutzer`
    	FROM `gesendet`
    	LEFT JOIN `Nachrichten`
    	ON (`Nachrichten`.`Id`=`gesendet`.`Nachricht`)
    	WHERE `Nachrichten`.`Id`='2'
    );


    Ich habe es jetzt mit einem SubQuery gelöst, da es mir einfacher und sinnvoller erscheint. Ob es auch eine funktionierende Möglichkeit mit einem LEFT JOIN gibt weiß ich nicht.

    Quelle: http://stackoverflow.com/questions/8776668/mysql-query-select-where-id-does-not-exist-in-the-join-table

    n0tiert schrieb:
    Deine Struktur sollste ja nicht verändern, und das sql sollte lediglich als ansatz dienen
    dump mal deine "struktur" mit 2-3 dummy einträgen , und poste die mal, dann kann ich später mal nachsehen.


    Um das ganze nochmal zu veranschaulichen habe ich das ganze noch mal als HTML-Datei vorbereitet:
    http://fabi755.lima-city.de/sonstiges/forum/MySQL-nicht-vorhandene-JOINs/uebersicht.html


    so listest du aber nur die angegebene ID , und nicht wie gewollt alle nicht gesendete .....
    bitte nextime ein sql struktur (ohne daten) dump, das ziel war die tables nicht manuell anlegen zu müssen :wink:
    offene nachrichten haben keine id im feld benutzer (tbl gesendet)?
    wie legst du die an ? lässt es ja garnicht zu mit "" für id

    Beitrag zuletzt geändert: 10.6.2013 19:36:34 von n0tiert
  9. Was soll die Relation "gesendet" aussagen? Wer alles eine Nachricht bekommen hat, oder wer eine Nachricht gesendet hat?
    SELECT *
    FROM Benutzer
    LEFT JOIN 
    gesendet
    ON gesendet = Benutzer
    WHERE nachrichten_id IS NULL

  10. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!