Seite 1 von 1

[Gelöst bzw. verworfen] mySQL Abfrage über zwei Tabellen

Verfasst: 26.02.2007 20:42
von bgx
Hmm ich komm einfach nicht drauf. Ich habe zwei Tabellen:

1.
user_id | username | user_birthday | userlevel
1 | Gerd | 14357 | 0

2.
user_id | usercars_carname | usercars_birthday
1 | Fastlane | 17436

nun möchte ich aus beiden ein Ergebniss erstellen, das Alphabetisch nach username bzw. usercarsname sortiert ist und zwar nur wenn birthday <> 999999

Also als ergebniss dann:

user_id | username | user_birthday | userlevel | usercars_carname | usercars_birthday
1 | NULL | NULL | NULL | Fastlane | 17436
1 | Gerd | 14357 | 0 | NULL | NULL

wie stelle ich das an?

Verfasst: 26.02.2007 20:50
von Miriam

Code: Alles auswählen

SELECT u.user_id,  u.username, u.user_birthday, u.userlevel, c.usercars_carname, c.usercars_birthday FROM tabelle_1 u, tabelle_2 c WHERE u.user_id = c.user_id AND u.user_birthday <> 99999 ORDERY BY u.username, c.usercars_name;

Verfasst: 26.02.2007 21:01
von bgx
Dank Dir Miriam!

So ähnlich hatte ich es zuerst auch:

Code: Alles auswählen

SELECT u.user_id, u.username, u.user_birthday, u.user_level, h.usercars_carname, h.usercars_birthday FROM phpbb_users u, phpbb_usercars h WHERE u.user_birthday <> 999999 AND u.user_active=1 AND h.usercars_birthday <> 999999 ORDER BY u.username, h.usercars_carname
Leider schreibt er mir dann kein Null sondern gibt als Ergebnis das aus:

Code: Alles auswählen

user_id  username  user_birthday  user_level  usercars_carname  usercars_birthday  
498 -Nadine- 4485 0 Wendy 12840 
498 -Nadine- 4485 0 ´Wendy 4632 
88 achimtun -5406 0 Wendy 12840 
88 achimtun -5406 0 ´Wendy 4632 
166 ADI -800 0 Wendy 12840 
166 ADI -800 0 ´Wendy 4632 

Mit der Abfrage von dir:

Code: Alles auswählen

SELECT u.user_id, u.username, u.user_birthday, u.user_level, h.usercars_carname, h.usercars_birthday FROM phpbb_users u, phpbb_usercars h WHERE u.user_id = h.user_id AND u.user_birthday <> 999999 AND u.user_active=1 AND h.usercars_birthday <> 999999 ORDER BY u.username, h.usercars_carname
bekomme ich als Ergebnis nur:

Code: Alles auswählen

user_id  username  user_birthday  user_level  usercars_carname  usercars_birthday  
3 alphadog 4632 1 ´Wendy 4632 
2 bgx 3787 1 Wendy 12840 

Verfasst: 26.02.2007 21:38
von S2B
Das, was du tun willst, hat imho nichts mit dem Verbinden von zwei Tabellen zu tun, da die Datensätze ja gar nicht miteinander verbunden werden. Warum willst du denn das ganze mit NULL-Feldern ausgeben lassen? Damit ein Benutzer mehrere Autos haben kann?

Wenn ja:

Code: Alles auswählen

SELECT u.user_id, u.username, u.user_birthday, u.user_level, h.usercars_carname, h.usercars_birthday
FROM phpbb_users u
INNER JOIN phpbb_usercars h
  ON h.usercars_birthday <> 999999
WHERE u.user_birthday <> 999999
  AND u.user_active=1
ORDER BY u.username, h.usercars_carname 

Verfasst: 26.02.2007 21:50
von bgx
Dank Dir S2B aber leider bekomme ich als Ergebnis dann:

Code: Alles auswählen

user_id  username  user_birthday  user_level  usercars_carname  usercars_birthday  
498 -Nadine- 4485 0 Wendy 12840 
498 -Nadine- 4485 0 ´Wendy 4632 
88 achimtun -5406 0 Wendy 12840 
88 achimtun -5406 0 ´Wendy 4632 
166 ADI -800 0 Wendy 12840 
166 ADI -800 0 ´Wendy 4632 
... was leider auch nicht stimmt.

Der Grund, warum ich es so haben will ist, das ich den Birthday Mod schon am laufen habe und ich nun über den usercarsmod zusätzliche geburtstage pro mitglied habe, die ich gerne in den Birthdaymod integrieren möchte. (Ich weiß das es schwierig ist und das es schon ein paar andere versucht haben, aber man kanns ja mal versuchen. Interesse wenn es klappt ist sicherlich da. ;-) )

Ich habe jetzt das versucht:

Code: Alles auswählen

SELECT phpbb_users.user_id, phpbb_users.username as 'name', phpbb_users.user_birthday as 'birthday', phpbb_users.user_level, phpbb_usercars.usercars_carname as 'name', phpbb_usercars.usercars_birthday as 'birthday' FROM phpbb_users left join phpbb_usercars on (phpbb_usercars.user_id=phpbb_users.user_id) WHERE phpbb_users.user_birthday <> 999999 AND phpbb_users.user_active=1 ORDER BY 'name'
Das sieht schon mal nicht schlecht aus:

Code: Alles auswählen

user_id  name  birthday  user_level  name  birthday  
498 -Nadine- 4485 0 NULL NULL 
88 achimtun -5406 0 NULL NULL 
166 ADI -800 0 NULL NULL 
3 alphadog 4632 1 ´Wendy 4632 
32 AmBullDusty 2463 2 NULL NULL 
2 bgx 3787 1 Wendy 12840 
ist aber immer noch nicht ganz das was ich brauche.

Verfasst: 26.02.2007 22:08
von S2B
Aber was stört dich denn an den zusätzlichen Daten? Du musst sie ja nicht verwenden...

Verfasst: 26.02.2007 22:29
von bgx
:lol: da hast du recht, aber ich hätte es halt gern komplett alphabetisch gehabt.

So hab ich ja nachher als Ergebnis:
ADI (25), Alphadog (23), Wendy (5), AmBullDusty (24), ....

hätte es gern so gehabt:
ADI (25), Alphadog (23), AmBullDusty (24), Wendy (5), ....

Man das ist auch nicht grad leicht mehrere Geburtstage pro User über den Birthdaymod laufen zu lassen :roll:

Verfasst: 26.02.2007 23:39
von bgx
Hmm es klappt wohl nicht, so wie ich mir das Vorgestellt habe. Deshalb habe ich es jetzt mit zwei Abfragen gelöst. Da die Geburtstagsabfrage bei mir eh gecacht wird, ist das imo nicht so schlimm.

Danke nochmal für die Hilfe bis hier hin. Ich bin auf einem Guten Weg, das ich es hin bekomme.

:wink: