komplexerer select

heyho

ich hab folgende daten, ne user tabelle mit userid,namen und ne tablle mit einträgen nach der zeit sortiert sind, wann man ne abfrage gemacht hat.

wenn ich jetzt die letzte aktivität haben will, brauch ich die maximale zeit (sprich die letzt aktivität) zusammen mit dem benutzer namen.

folgendes konstrukt hab ich, was aber nicht funktioniert, wo liegt der fehler?

Code:
mysql> select id,user,(select max(time) from resets where user_id = u.id) as last from user as u where last < 1228559037 order by last desc;
ERROR 1054 (42S22): Unknown column 'last' in 'where clause'
 
Auswertungsreihenfolge:
Für Wen Geht Susi Heute Ohne Slip.
=>
From, Where, Select1, Groupby,having, Order By, Select2
d.h es wird der Where-Teil ausgewertet und erst danach der Select-Teil (in dem die Zuweisung stattfindet).
 
eine geniale eselsbrücke! ;)
wie müsste das dann aber aussehen, damit der select greift?
da müsst ich ja irgendwie das last schon vorher bekommen und es damit in zwei seperaten querys abarbeiten seh ich das richtig?

edit: oder kann man da noch sowas einbauen wie max(resets.time), allerdings bekomm ich ja dein keine where klausel mit unter
 
Wie wär's stattdessen mit folgendem Konstrukt:

Code:
SELECT u.id, u.user, r.time
FROM user u
LEFT JOIN resets r ON u.id=r.user_id
WHERE r.time < 1228559037
ORDER BY r.time DESC
LIMIT 1
 
an einen inner join hatte ich auch gedacht, nur dann hab ich grundsätzlich ziemlich viele datensätze zurückbekommen, wenn ich mehrere time einträge größer meiner abfragezeit hatte.
ich möcht ja sozusagen von allen benutzern jeweils die letzte aktivität haben!
(ich hoffe ich hab deinen query richtig interpretiert, kann den grad nicht ausprobieren)
 
Ich hab dich so verstanden, dass du eigentlich nur die letzte Aktivität (vor einem bestimmten Zeistempel) haben willst, nicht die von allen Nutzern. Ist aber auch kein Problem und sollte in etwa so gehen:

Code:
SELECT u.id, u.user, max(r.time) AS last
FROM user u
LEFT JOIN resets r ON u.id=r.user_id
WHERE last < 1228559037
GROUP BY u.id
 
das produziert allerdings wieder den bekannten fehler:

Code:
 ERROR 1054 (42S22): Unknown column 'last' in 'where clause'


ich glaub ich habs:
doch nich!
doch!

und zwar brauch ich doch gar nicht die abfrage mit dem maximum, weil das wird ja erst nach der where klausel bestimmt, susi lässt grüßen.
ich kann ja, da ich ja ohnehin den größten wert haben will, einfach nach resets.time filtern, indem ich da einfach nen where resets.time < time() - 86400 reinpack!

Code:
SELECT
    user.id,user.user,max(resets.time) 
FROM
    resets
INNER JOIN 
    user 
  ON
    resets.user_id = user.id 
WHERE
    resets.time > 1228899994 - 86400
GROUP BY 
    user.id;

et voila, ich bekomm die letzten aktivitäten innerhalb des letzten tages ;)
jackpot!
 
Original von CDW
Auswertungsreihenfolge:
Für Wen Geht Susi Heute Ohne Slip.
=>
From, Where, Select1, Groupby,having, Order By, Select2
d.h es wird der Where-Teil ausgewertet und erst danach der Select-Teil (in dem die Zuweisung stattfindet).

Kenn ich als

Für wen stript Gabi heute ohne slip :)
 
Original von v3rtico
Original von CDW
Auswertungsreihenfolge:
Für Wen Geht Susi Heute Ohne Slip.
=>
From, Where, Select1, Groupby,having, Order By, Select2
d.h es wird der Where-Teil ausgewertet und erst danach der Select-Teil (in dem die Zuweisung stattfindet).

Kenn ich als

Für wen stript Gabi heute ohne slip :)

Fuer Wen Geht Susi Heute Ohne Slip? => FWGSHOS
From, Where, Select1, Groupby, Having, Orderby, Select2 => FWSGHOS
S und G vertauscht ;)

Fuer wen stript Gabi heute ohne Slip? stimmt :)

(zumindest wenn die Reihenfolge richtig ist. Hab schon laenger kein SQL mehr gehabt [RoR rockt ;)])
 
Original von snoggo
Original von v3rtico
Original von CDW
Auswertungsreihenfolge:
Für Wen Geht Susi Heute Ohne Slip.
=>
From, Where, Select1, Groupby,having, Order By, Select2
d.h es wird der Where-Teil ausgewertet und erst danach der Select-Teil (in dem die Zuweisung stattfindet).

Kenn ich als

Für wen stript Gabi heute ohne slip :)

Fuer Wen Geht Susi Heute Ohne Slip? => FWGSHOS
From, Where, Select1, Groupby, Having, Orderby, Select2 => FWSGHOS
S und G vertauscht ;)

Fuer wen stript Gabi heute ohne Slip? stimmt :)

(zumindest wenn die Reihenfolge richtig ist. Hab schon laenger kein SQL mehr gehabt [RoR rockt ;)])

Nein eben umgekehrt.

Guckstu da is vertauscht:
FWGSHOS = Für wen geht Susi heute ohne Slip
FWSGHOS = From, Where, Select1, Groupby, Having, Orderby, Select2

Guckstu da is richtig:
FWSGHOS = Für wen stript Gabi heute ohne Slip
FWSGHOS = From, Where, Select1, Groupby, Having, Orderby, Select2

;)
 
Zurück
Oben