PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : SQL-Abfrage -- brauche Hilfe



sebbel
01-01-2004, 18:23
Ich habe folgendes Problem :
Ich habe Daten in einer Datenbank für ein Forum, jedoch habe ich unter mySQL folgendes Problem :

Meine Tabelle hat folgende Struktur :
- kategorie_id {INT}
- thread_id {INT}
- beitrag_id {INT}
- titel {VARCHAR}
- datum {DATETIME}

Daten wären zum Bsp :

0 0 0 Titel1 2003-12-19 20:00:00
0 1 0 Titel2 2003-12-19 20:01:00
0 2 0 Titel3 2003-12-19 20:10:00
0 0 1 RE:Titel1 2003-12-19 20:23:00

Ich möchte nun die Threads in der Kategorie auslesen und aber auch das Datum der Beiträge beachten
-> es sollte als erstes der Thread angezeigt werden, wo der letzte Beitrag geschrieben wurde !!
Logische Folge für meine Abfrage als Antwort wäre nun, wenn mich nur die Thread_id interessiert :
0 - 2 - 1 (halt nach Datum sortiert), jedoch bekomme ich grade diese Abfrage nicht hin.

Ich habe es schon erfolglos mit diesen beiden Abfragen probiert :

1. SELECT thread_id FROM table WHERE kategorie_id = 0 GROUP BY thread_id, datum

2. SELECT thread_id FROM table WHERE kategorie_id = 0 GROUP BY thread_id ORDER BY datum

Jedoch funktioniert beides nicht und ich hab leider keine Idee mehr, wie es hinbekommen könnte, daher hoffe ich, dass jmd von Euch für mich einen entscheidenen Tipp hat.

Vielen Dank

Sebastian

quinte17
02-01-2004, 10:23
mhh also mit oracle wüsste ich schon wie des geht ;)
mal sehen

select kategorie_id, thread_id, max(datum) from table group by kategorie_id, thread_id order by datum desc

so bekommst du des glaub ich eher hin ^^
deine where klausel auf 0 einzurschränken ist natürlich eigentlich sinnlos, da du ja nicht nur die 0er sehen willst sondern eigentlich alle beiträge ;P

bis denn

the_brain
05-01-2004, 12:20
SELECT thread_id FROM table WHERE kategorie_id = 0 ORDER BY datum DESC


Verstehe nicht, wieso du das nicht so machst. Ist doch das einfachste - oder geht es so auch nicht? Bzw. erreichst du so nicht das was du erreichen willst?

gruss
martin

quinte17
06-01-2004, 00:37
so nicht ganz ...
so bekommst du mehr sachen zurück die du nicht haben willst musst du dir mal dieses forum vorstellen welches in verschiedene bereiche eingeteilt ist
z.B. Datenbanken

darunter hängen dann die threads
z.B. SQL-Abfrage -- brauche Hilfe

bei dir würde jetzt alle beiträge des forums Datenbanken nach datum sortiert zurückkommen, aber nicht von jedem einzelnen thread der aktuellste Beitrag was eigentlich gewünscht war

greetz

elrond
06-01-2004, 11:55
ich versuch's mal:

select thread_id,max(datum) as dat from table group by thread_id order by datum desc

da du in der mysql wahrscheinlich keine subqueries zur verfügung hast kannst du das ergebnis der abfrage auf ein array legen oder auch in eine temp tabelle packen.

In der zweiten abfrage kannst du damm mit diesen Daten den tatsächelichen beitrag raussuchen.

ein mögliches Subselect würde die sache vereinfachen:


select * from table t, (select thread_id,max(datum) as dat from table group by thread_id order by datum desc) tt
where t.thread_id=tt.thread_id
and t.datum=tt.dat