Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   [MYSQL] Letzte Einträge pro kategorie (https://www.delphipraxis.net/94386-%5Bmysql%5D-letzte-eintraege-pro-kategorie.html)

_frank_ 20. Jun 2007 19:04

Datenbank: MySQL • Version: 5.x • Zugriff über: php-mysql-modul

[MYSQL] Letzte Einträge pro kategorie
 
Hallo,
ich hab da grade ein kleines mysql-problem.

ich habe eine Tabelle mit den "wichtigen spalten" cat_id (int) und image_date (int).
nun will ich pro kategorie (cat_id) nur den letzten Eintrag (höchster Wert in Image-date).

ich hab schon mit "group by" rumprobiert, aber es liefert mir immer nur das älteste, ein "order by" vorher geht nicht, danach ist es unnütz, da group by nur 1 Datensatz pro cat_id übermittelt.
habs auch noch mit distinct probiert, aber da bekomme ich nur den Maximalwert der angegebenen Spalte und nicht alle Felder.

also sowas in der Art:

Code:
SELECT * FROM `4images_images` Order by `image_date` DESC Group by `cat_id`;
Gruß Frank

3_of_8 20. Jun 2007 19:11

Re: [MYSQL] Letzte Einträge pro kategorie
 
SQL-Code:
SELECT * FROM `images_images` ORDER BY `image_date` DESC LIMIT 1;

DeddyH 20. Jun 2007 19:23

Re: [MYSQL] Letzte Einträge pro kategorie
 
Hallo, lies Dir das mal durch.

Jelly 20. Jun 2007 20:07

Re: [MYSQL] Letzte Einträge pro kategorie
 
Manuels Lösung liefert aber keine Gruppierung nach cat_id, sondern einfach nur einen Datensatz :(
SQL-Code:
SELECT cat_id, max (image_date) as last_image_date
FROM 4images_images

3_of_8 20. Jun 2007 20:11

Re: [MYSQL] Letzte Einträge pro kategorie
 
Ah, ich hab das mit "für jede cat_id" überlesen.

DeddyH 20. Jun 2007 20:28

Re: [MYSQL] Letzte Einträge pro kategorie
 
Jellys Lösung liefert zusammenhanglose Daten (die ID und immer das größte Datum). Ich habe den Link nicht umsonst gepostet :mrgreen: .

Jelly 20. Jun 2007 21:24

Re: [MYSQL] Letzte Einträge pro kategorie
 
Zitat:

Zitat von DeddyH
Jellys Lösung liefert zusammenhanglose Daten (die ID und immer das größte Datum). Ich habe den Link nicht umsonst gepostet :mrgreen: .

Ich habe die Aufgabe ja auch genau so verstanden:
Zitat:

Zitat von _frank_
nun will ich pro kategorie (cat_id) nur den letzten Eintrag (höchster Wert in Image-date).

Was anderes als den höchsten Wert liefert denn Max

DeddyH 20. Jun 2007 21:26

Re: [MYSQL] Letzte Einträge pro kategorie
 
Er will (soweit ich verstanden habe) eine Auflistung der Kategorien mit deren jeweils höchstem Wert.

Jelly 20. Jun 2007 21:27

Re: [MYSQL] Letzte Einträge pro kategorie
 
Ja, eben.
Steh ich grad im Wald, oder bist du das :gruebel: Also irgendeiner steht auf dem Schlauch, das steht fest :mrgreen:

DeddyH 20. Jun 2007 21:35

Re: [MYSQL] Letzte Einträge pro kategorie
 
Ich hol Dich mal vom Schlauch runter :zwinker: .
Angenommen, seine Tabelle sieht so aus:
Kategorie - Wert
1 1
1 2
2 7
2 12
5 6
6 20

Dann käme bei Deinem Statement das folgende heraus:
1 20
1 20
2 20
2 20
5 20
6 20

Er muss also je Kategorie das Maximum ermitteln, nach Kategorie gruppieren und dann ausgeben. Wie das geht, ist in der von mir verlinkten Seite prima beschrieben.

//Edit: Buchstabendreher korrigiert.

Jelly 20. Jun 2007 21:37

Re: [MYSQL] Letzte Einträge pro kategorie
 
Brrrr.... Ich Depp hab ja auch einfach das group by verduselt:
SQL-Code:
SELECT cat_id, max (image_date) as last_image_date
FROM 4images_images
group by cat_id
gibt dann Folgendes aus:
Code:
1 2 
2 12 
5 6 
6 20

DeddyH 20. Jun 2007 21:41

Re: [MYSQL] Letzte Einträge pro kategorie
 
Siehste, das ist Schritt 1. Wenn dann noch gejoint werden muss, wird es etwas kniffliger. Aber hast schon Recht, so isses IMHO richtig.

Jelly 20. Jun 2007 21:43

Re: [MYSQL] Letzte Einträge pro kategorie
 
Ich sag ja... Habs nur verschwitzt :wall:

DeddyH 20. Jun 2007 21:45

Re: [MYSQL] Letzte Einträge pro kategorie
 
Schön, dass wir uns schlussendlich doch einig geworden sind, oder? :thumb:

Jelly 20. Jun 2007 21:47

Re: [MYSQL] Letzte Einträge pro kategorie
 
Darauf mach ich mir doch glatt mal nen Wein auf. :wink:

_frank_ 21. Jun 2007 00:15

Re: [MYSQL] Letzte Einträge pro kategorie
 
erstmal danke für eure Antworten...
der Link von DeddyH hat mir schon geholfen (auch wenns Arg kompliziert in meinen Augen ist...)
jellys link gibt mir leider nur die benannten spalten an, und lässt kein * zu...

meine aktuelle Abfrage sieht so aus:
SQL-Code:
SELECT * FROM 4images_images i2 WHERE i2.image_date = (SELECT MAX(i1.image_date) AS neustes FROM 4images_images i1 WHERE i1.cat_id = i2.cat_id);
jetzt hatte ich probiert mir den Kategoriename aus einer anderen Tabelle zu holen. normal geht das ja so:

SQL-Code:
SELECT * , 4images_categories.cat_name AS catname FROM 4images_images,4images_categories WHERE 4images_categories.cat_id = 4images_images.cat_id
meine bisherigen versuche, dies in mein aktuelles set einzubauen werden, bringt mir mehr resultsets als ursprünglich, statt nur den name oder einen Mysql-Fehler durch die variablenzuweisung (i2). mal einer der vielen versuche:

SQL-Code:
SELECT * FROM , 4images_categories.cat_name AS catname
FROM 4images_images i2 ,4images_categories
WHERE (4images_categories.cat_id = 4images_images.cat_id) and
  (i2.image_date =
    (SELECT MAX(i1.image_date) AS neustes FROM 4images_images i1 WHERE i1.cat_id = i2.cat_id)
  );
Gruß Frank

DeddyH 21. Jun 2007 07:13

Re: [MYSQL] Letzte Einträge pro kategorie
 
Mal schnell heruntergetippt:
SQL-Code:
SELECT A.*,B.cat_name AS catname
FROM 4images_images A
JOIN 4images_categories B ON B.cat_id = A.cat_id
WHERE A.image_date = (
    SELECT MAX(C.image_date)
    FROM 4images_images C
    WHERE C.cat_id = A.cat_id)
So sollte es richtig sein. Wenn nicht, bitte nochmal melden.

_frank_ 21. Jun 2007 11:32

Re: [MYSQL] Letzte Einträge pro kategorie
 
danke dir deddyH,
funktioniert wie es soll...jetzt mus ich mich da nur reindenken ;), aber dazu gibts ja genug doku...

Gruß Frank

DeddyH 21. Jun 2007 12:17

Re: [MYSQL] Letzte Einträge pro kategorie
 
Vielleicht ist es besser zu verstehen, wenn man es etwas umformuliert:
SQL-Code:
SELECT A.*,B.cat_name AS catname
FROM 4images_images A, 4images_categories B
WHERE B.cat_id = A.cat_id
AND A.image_date = (
    SELECT MAX(C.image_date)
    FROM 4images_images C
    WHERE C.cat_id = A.cat_id)

Jelly 21. Jun 2007 12:22

Re: [MYSQL] Letzte Einträge pro kategorie
 
Was spricht gegen:
SQL-Code:
select
  B.cat_id, B.cat_name, max(A.image_date) as Max_image_date
from
  4images_images A
inner join
  4images_categories B on B.cat_id = A.cat_id
group by
  B.cat_id, B.cat_name
Warum also mit SubSelects arbeiten, was die Abfrage bestimmt nicht schneller macht.

_frank_ 21. Jun 2007 12:26

Re: [MYSQL] Letzte Einträge pro kategorie
 
@jelly
dass ich nur die 3 genannenten spalten habe, die ich aber nur zum aussortieren nehmen will, möchte aber aus der _images-Tabelle den kompletten Datensatz.

@deddy, die 2. Varinate ist schon eher verständlich, aber werde mir danach auch mal die erste genauer anschauen...

Gruß Frank

Jelly 21. Jun 2007 12:54

Re: [MYSQL] Letzte Einträge pro kategorie
 
Dann müssen halt die fehlenden Spalten im select und im group by mit aufgenommen werden


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:48 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz