Seite 1 von 1

SQL - Ich raffs gerade nicht

Verfasst: 17.02.2011 15:02
von BrahmA
Hallo zusammen,

ich bastel gerade an einem einfachen php-script und krieg gerade die sql-abfrage nicht voreinander.... :(

Tabelle 1:
datum feld1 feld2
1.1.2011 1 3
2.2.2012 2 3

Tabelle 2:
ID Name
1 User1
2 User2
3 User3

Was ich brauchte sind 2 abfragen:

1) eine die mir Tabelle 1 nach Datum sortier ausgibt, dabei aber die Werte in feld1 und feld2 mit den Usernamen aus Tabelle 2 ersetzt
2) eine Abfrage die die User alphabetisch aus Tabelle 2 ausliest und dabei zählt wie oft die ID in Tabelle1.feld1 und Tabelle1.feld2 vorkommt

Das müsste doch beides direkt im SQL in einer Abfrage gehen oder? Quick und dirty mit mehreren Abfragen hab ich das zum Teil schon, aber das ist natürlich unschön ;)

Danke schonmal für die Hilfe

Re: SQL - Ich raffs gerade nicht

Verfasst: 17.02.2011 15:55
von Birne94
1)

Code: Alles auswählen

SELECT datum, u1.name as user1, u2.name as user2 FROM tabelle_a, tabelle_b as u1, tabelle_b as u2 WHERE u1.id=feld1 AND u2.id=feld2 ORDER BY datum;
Ausgehend von der Tabellenstruktur:

Code: Alles auswählen

tabelle_a:
  datum 	text 
  feld1 	int(11) 
  feld2 	int(11) 

tabelle_b:
  id 	int(11) 
  name 	text 
=>

Code: Alles auswählen

Array
(
    [0] => Array
        (
            [datum] => 1.1.11
            [user1] => user1
            [user2] => user3
        )

    [1] => Array
        (
            [datum] => 2.2.11
            [user1] => user2
            [user2] => user3
        )

)
Den zweiten hab ich jetzt auf die Schnelle nicht hinbekommen.

Ja, es lässt sich bestimmt einfacher mit JOINs lösen, aber ich mag es so lieber ;)

Re: SQL - Ich raffs gerade nicht

Verfasst: 17.02.2011 18:27
von BrahmA
Herzlichen Dank, das macht genau das was es soll! Ob mit JOIN oder so ist mir dabei eigentlich sehr egal ;)

Re: SQL - Ich raffs gerade nicht

Verfasst: 18.02.2011 23:50
von gn#36
Join dürfte schneller sein, da obiges Beispiel erst mal alle Kombinationen holt und dann die wegwirft, die nicht passen.

Re: SQL - Ich raffs gerade nicht

Verfasst: 19.02.2011 15:20
von cYbercOsmOnauT

Code: Alles auswählen

SELECT datum, u1.name as user1, u2.name as user2 FROM tabelle_a, tabelle_b as u1, tabelle_b as u2 WHERE u1.id=feld1 AND u2.id=feld2 ORDER BY datum;
ergibt

Code: Alles auswählen

SELECT u.datum, u1.name as user1, u2.name as user2
  FROM tabelle_a AS u
  INNER JOIN tabelle_b AS u1 ON u1.id=u.feld1
  INNER JOIN tabelle_b as u2 ON u2.id=u.feld2
  WHERE 1
  ORDER BY u.datum;
Über die Geschwindigkeit kann ich nichts sagen.

Grüße,
Tekin