Warnung: file_put_contents(/home/www/web1/html/php_dev/test.txt) [function.file-put-contents]: failed to open stream: Permission denied in /home/www/web1/html/php_dev/sys/lib.activity.php (Zeile 58)
SELECT: AUsgabe der jeweils aktuellsten Records [Archiv] - PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr
ebiz-webhosting
- Ad -
php-resource




Archiv verlassen und diese Seite im Standarddesign anzeigen :
SELECT: AUsgabe der jeweils aktuellsten Records


 
hand
24-02-2002, 10:27 
 
Ich habe eine MySQL Tabelle, bestehend aus den Felder "name", "zeit" und "wert".

Ich suche nach einem Select der es ermöglicht je "name" alle Records auszugeben, die jeweils dem jüngsten Zeitwert zuzuordnen sind.
(Nur die aktuellsten Records sind auszugeben)

Jemand eine Idee? Ich habe schon einiges probiert mit max() concat(), bekomme es aber nicht auf die Reihe.


Inhalt der Tabelle:
+---------+---------------------+------+
| name | zeit | wert |
+---------+---------------------+------+
| Hans | 2001-05-14 16:12:04 | 1 |
| Hans | 2001-05-15 15:14:01 | 2 |
| Peter | 2001-05-15 15:14:01 | 1 |
| Franz | 2001-05-15 15:14:01 | 2 |
| Franz | 2001-11-03 14:28:11 | 1 |
| Franz | 2001-11-07 16:25:08 | 3 |
| Franz | 2001-12-14 16:55:52 | 5 |
| Franz | 2001-12-14 16:55:52 | 1 |
+---------+---------------------+------+

Gewünschtes Resultat:
+---------+---------------------+------+
| name | zeit | wert |
+---------+---------------------+------+
| Hans | 2001-05-15 15:14:01 | 2 |
| Peter | 2001-05-15 15:14:01 | 1 |
| Franz | 2001-12-14 16:55:52 | 5 |
| Franz | 2001-12-14 16:55:52 | 1 |
+---------+---------------------+------+


MySQL 3.23.46 (ab 3.24 gibt es erst Subselect-Funktionaliät)

[Editiert von hand am 24-02-2002 um 10:58]

 
webwiese
24-02-2002, 11:21 
 
Probiers mal mit

SELECT * FROM tablle ORDER BY zeit DESC

Gruß
webwiese

 
Titus
24-02-2002, 16:14 
 
wohl doch eher
select * from TABELLE order by ZEIT desc group by NAME

 
hand
24-02-2002, 20:58 
 
Nein, nein, leider so simpel ist das leider nicht.
Ich möchte nur die jeweils jüngsten Records je Name herausgefiltert haben.

Das müßte irgendwie mit JOINs zu formulieren sein ?
Aber ein JOIN mit ein und derselben Tabelle?
Ob das überhaupt mit einem Select funktioniert?

[Editiert von hand am 24-02-2002 um 21:01]

 
MelloPie
24-02-2002, 21:18 
 
join geht nur bei zwei oder mehr tabellen
so sollte es gehen:

select name, max(zeit),wert from tbl group by name

 
hand
24-02-2002, 21:50 
 
Nein leider. Mit diesem Select bekomme ich immer nur einen Record, ein Name kann aber mehrere Records gleichen Zeitpunktes haben.

Ich löse das jetzt mit zwei Selects:

select name, max(zeit) as zeit from tbl group by name

und mit dem Ergebnis gehe ich dann in einer Schleife
die Records über den Index name und zeit lesen. Das funktioniert wenigstens.

Danke an alle.

 
Sky
25-02-2002, 09:56 
 
Bin etwas spät dran.. Aber mit einem Self-Join?

select * from tab one, tab two where one.name=two.name order by zeit desc

 
Titus
25-02-2002, 13:30 
 
Original geschrieben von Sky
select * from tab one, tab two where one.name=two.name order by zeit desc
Im Prinzip möglich, aber da fehlt auch wieder das group, und ausserdem ist zeit nicht eindeutig:

select one.*, max(two.zeit) as maxzeit from tab one, tab two where one.name=two.name and one.zeit=maxzeit group by one.name

könnte funktionieren, wenn´s von den anderen Queries keine tut.

Hach wär das SCHÖN, wenn mySQL endlich sub-selects verstehen würde!


Alle Zeitangaben in WEZ +2. Es ist jetzt 20:06 Uhr.