SQL-Query
Marvin
- datenbank
Hallo,
ich habe da mal eine SQL-Frage an Euch:
Ich habe eine Content-Tabelle (a), die eine Referenz-ID
auf einen Eintrag in einer Kategorie-Tabelle (b) besitzt
und somit ein Eintrag in (a) jeweils einer Kategorie
aus (b) zugeteilt ist. Es kann also kein Datensatz _ohne_
Kategorie existieren. In etwa so:
(a) id, cat_id, name, url [..]
(b) cat_id, name [..]
Nun gibts es zwei verschiedene Arten und Weisen mit denen
auf die Daten zugegriffen werden muss. Einmal (1) möchte
ich die neusten Datensätze _einer_ Kategorie auslesen (das
klappt bereits, siehe Anhang), des Weiteren (2) möchte ich
in einem(!) Statement gerne den neusten Eintrag zu _jeder_
Kategorie (aus jeder Kategorie nur einen, dne neusten, Eintrag).
Doch scheitere ich bisweilen an der Realisierung des letzen (2)
Statements und wäre glücklich über jede Hilfe.
Danke.
Marvin
SELECT DISTINCT
modul.id,
modul.category_id,
modul.topic,
modul.content,
modul.member_id,
modul.created,
categories.category,
member_pref.nickname
FROM
nboard modul,
nboard_categories categories
LEFT JOIN
member ON modul.member_id=member.id
LEFT JOIN
member_pref ON member.id=member_pref.member_id
WHERE
categories.id=modul.category_id
AND
categories.id=2
ORDER BY
modul.created DESC
LIMIT 0, 4
Hallo Marvin,
[...] des Weiteren (2) möchte ich
in einem(!) Statement gerne den neusten Eintrag zu _jeder_
Kategorie (aus jeder Kategorie nur einen, dne neusten, Eintrag).
die LIMIT-Klausel in Deinem Posting läßt mich vermuten, dass Du mit MySQL arbeitest. Gerade bei MySQL ist die Angabe der verwendeten Version unerläßlich, da Dein Problem am einfachsten mit einer korrelierenden Unterabfrage zu lösen ist. Diese unterstützt MySQL erst ab Version 4.1. Für andere DBMS sollte dies kein Problem darstellen.
Doch scheitere ich bisweilen an der Realisierung des letzen (2)
Statements und wäre glücklich über jede Hilfe.
Wenn Du uns Dein DBMS verrätst, können wir Dir besser helfen.
Freundliche Grüße
Vinzenz
OK, sorry,
wusste nicht, dass die MySQL Versionen so differieren.
Also: 4.1.7
Danke
Marvin
yo,
SELECT modul.id, modul.category_id .... modul.created, categories.category
FROM nboard modul, nboard_categories categories
WHERE categories.id=modul.category_id
AND modul.created =
(
SELECT MAX(tab1.created)
FROM nboard tab1
WHERE tab1.category_id = modul.category_id
)
die anderen LEFT JOINS habe ich mir mal ersparrt.
Ilja
Super, besten Dank.
Marvin