MYSQL Abfrage über 2 Tabellen.. bitte um Hilfe...

MingdU

Grünschnabel
Hallo.
Ich habe ein Problem. Ich weiß nicht ob es dafür eine Lösung gibt... aber ich frage hier einfach mal.. vllt hat jemand eine Idee.

Ums kurz zu erklären:
Habe 2 Tabellen. Und zwar
Tabelle benutzer und
Tabelle teilnehmer

in der benutzer-tabelle sind alle benutzer mit einer eindeutigen id versehen.
wenn der benutzer nun "teilnimmt", wird er mit seiner id in die teilnehmer tabelle geschrieben. dort wird in weiteren spalten definiert zu welchem "event" er teilnimmt (event_id) und ob er dafür bezahlt hat (payed).

Nun möchte ich mittels Mysql herausfinden, welche user nicht für das event XY angemeldet sind.
Andersherum habe ich es schon geschafft. (also welche benutzer für das event XY angemeldet sind)

Und zwar:
SELECT
benutzer.userid
FROM
benutzer
INNER JOIN
teilnehmer
ON
benutzer.userid = teilnehmer.user_id
WHERE
teilnehmer.event_id = '$das_aktuelle_event]'


Nun möchte ich aber alle Benutzer aus der benutzer-tabelle haben, die nicht für das "aktuelle event" angemeldet sind. wenn ich bei where das = gegen ein <> tausche sucht er mir nur die ids aus der teilnehmer-tabelle für andere events. und dann hab ich keine werte mit den ich arbeiten kann.

Ich benötige grob umschrieben: Alle ID's aus der benutzer-tabelle wobei die benutzer nicht in der teilnehmer-tabelle bei dem "aktuellen event" stehen dürfen.

Ich habe auch schon Abfragen ohne joins probiert. dort komme ich aber meist auf doppelte bzw dreifache ergebnismengen. ich weiß einfach nicht weiter und mir fällt einfach nichts mehr ein.. ich hoffe mir kann jemand helfen.
 
SELECT
benutzer.userid
FROM
benutzer
INNER JOIN
teilnehmer
ON
(benutzer.userid = teilnehmer.user_id)
WHERE
teilnehmer.event_id = '$das_aktuelle_event'
AND
teilnehmer.user_id IS NULL;
 
hmm das scheint irgendwie nicht hinzuhauen. Ich lasse danach die Anzahl der Ergebnisse ausgeben.. und da kommt dann 0 raus...

bsp. ich habe zurzeit 800 benutzer eingetragen. für das aktuelle event sind 4 angemeldet.
also müsste ich ja 796 rausbekommen oder?

bei deiner abfrage kommt 0 :(

was macht den dieses is NULL?

trotzdem danke für die Bemühung.

gruß MingdU
 
Ok, mein fehler, teilnehmer.user_id ist ja bestimmt ein INTEGER und PRIMARY und AUTO_INCREMENT

Kann also gar nicht NULL sein glaube ich.

schau mal nach ob es in teilnehmer ein feld gibt das DEFAULT NULL ist, aber bei allen Teilnehmern (4) was drin steht (also nicht NULL)

dann soltest du beim Abfragen des Feldes mit IS NULL 796 datensätze bekommen, da er ja in teilnehmer nichts findet was dazu passt.

Eventuell dann auch mal das inner join in ein left join ändern.

Probiere das mal aus, das sollte auf jeden Fall so klappen, ich mache das auch ständig, kann es mir nur nicht merken....
 
hmm habe leider keine felder die dahingehend 0 sind.

also in der benutzertabelle stehen daten wie name vorname adresse email usw...
und in der teilnehmer nur userid eventid und bezahlt.
sobald eine userid (eines benutzers der benutzer-tabelle) in der teilnehmer-tabelle steht, nimmt er an dem event "eventid" teil.

so gesehen verbindet diese beiden tabellen nur die userid.

und ich will doch nur die user die nicht in der teilnehmertabelle mit der aktuellen eventid stehen :(

also ich verzweifle hier wirklich...

trotzdem danke für die bemühung.

mfg MingdU
 
Ok, versuch mal folgendes

SELECT
benutzer.userid
FROM
benutzer
left join
teilnehmer
ON
(benutzer.userid = teilnehmer.user_id)
WHERE
teilnehmer.event_id =0;
 
es geht nicht :'(

tut mir schon leid das ich dich so lange "einspanne" und deine zeit raube...

aber er will das nicht machen.. kommt wieder auf 0 treffer. hmm...

ich weiß nicht ob ichs exakt erklärt habe.. wenn nicht tut mir das leid... also nochmal exakt beschrieben:

der teilnehmer kann auf der hp auf "anmelden" drücken.
das aktuelle event wurde vom administrator vorher festgesetzt und befindet sich in der tabelle settings.
sobald der benutzer auf anmelden gedrückt hat folgt ein INSERT in die teilnehmer-tabelle mit der userid aus der benutzer tabelle und der event_id aus der settings-tabelle. also vorher stand dieser benutzer NICHT mit der besagten eventid in der teilnehmer tabelle. KANN aber mit einer anderen eventid schon drin gestanden haben... ich denke mal dann hätte die letzte query von dir funktioniert.

ich glaube das spielt hier eine wichtige rolle und ich hatte vergessen dies explizit zu erwähnen.

ich hoffe das das verständlich genug rüber kommt :)

mfg MingdU
 
Zuletzt bearbeitet:
ok folgendes biete ich dir an...

exportiere beide tabellen als sql files und schick sie mir an info@shoppersworld.de

ich importiere sie, baue die query und schick dir dann die query

Vielleicht übersehe ich was weil ich die daten und die felder nicht kenne

Bitte den export mit data und structure

Gruß
 
also:

SELECT *
FROM benutzer AS a
LEFT JOIN events_teilnehmer AS b ON ( a.userid = b.user_id )
WHERE user_id IS NULL

Funktioniert bei mir perfekt....


6 Peter Mustermann XXXXXX 1 NULL NULL NULL NULL
7 Guenter Mustermann XXXXXX 1 NULL NULL NULL NULL
8 Laura Mustermann XXXXXX 0 NULL NULL NULL NULL
9 Marianne Mustermann XXXXXX 0 NULL NULL NULL NULL

Du musst nur noch die Abfrage für die event ID einbauen, falls ein User bereist für ein anderes event angemeldet ist
 
Zuletzt bearbeitet:

Neue Beiträge

Zurück