Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Sortierung (https://www.delphipraxis.net/152498-sortierung.html)

Ykcim 24. Jun 2010 14:26

Datenbank: MySQL • Version: 5 • Zugriff über: ohne Komponenten

Sortierung
 
Hallo Zusammen,

ich habe in meinem MySQL Server eine Tabelle, in der werden die Kommentare zu einem Artikel geschrieben. Die Tabelle enthält folgende Spalten:
ID, Datum: DATETIME, Verfasser: VARCHAR, ArtikelNr: INTEGER, Kommentar: VARCHAR.

Jetzt kann es zu einem Artikel mehrere Kommentare geben. Ich brauche eine Abfrage, die mir für jeden Artikel den jüngsten (neuste Datum) Kommenatr ausgibt.

Ich möchte nicht für jeden Artikel eine Liste haben, sondern nur eine aller Artikel mit den jeweils jüngsten Kommentaren.

Ich bekomme das irgendwie nicht hin und hoofe, dass mir hier jemand helfen kann...

Vielen Dank

Ykcim

mkinzler 24. Jun 2010 14:28

AW: Sortierung
 
Gruppiere die Datensätze (
SQL-Code:
 ...group by ...
)

DeddyH 24. Jun 2010 14:31

AW: Sortierung
 
Oder vielleicht so (ungetestet):
SQL-Code:
SELECT
  Datum, Verfasser, ArtikelNr, Kommentar
FROM
  Tabelle A
WHERE Datum = (
  SELECT
    MAX(Datum)
  FROM
    Tabelle B
  WHERE B.ArtikelNr = A.ArtikelNr)

Ykcim 24. Jun 2010 14:34

AW: Sortierung
 
Das habe ich so versucht:

SQL-Code:
select Datum, ArtikelNr, Kommentar from kommentterminv
group by ArtikelNr
order by Datum desc
Aber dann bekomme ich nicht die Kommenatre mit dem jüngsten Datum, sondern die Kommentare, die zuerst in der Liste stehen - egal welches Datum sie haben...

Ich habe nur eine Tabelle...?

mkinzler 24. Jun 2010 14:36

AW: Sortierung
 
Mich wundert, dass es so funktioniert, da ja 2 Felder weder als Aggegat noch als Teil der Gruppierungsbedingung vorliegen

Ykcim 24. Jun 2010 14:39

AW: Sortierung
 
Wie würdet Ihr das denn machen?

Stelle Euch vor, Ihr wollt immer nur die letzten Meinungen der Kunden zu Euren Artikeln sehen. Wie würdet Ihr das machen?

Von funktionieren kann hier noch keine Rede sein ;-)

DeddyH 24. Jun 2010 14:41

AW: Sortierung
 
Hast Du #3 einmal versucht?

DataCool 24. Jun 2010 14:44

AW: Sortierung
 
Hi,

vielleicht habe ich jetzt was übersehen, aber sollte nicht ein "einfaches"

Code:
Select xyz from Tablename order by ArtikelNr desc, Datum desc
Wenn's dann fürn bestimmten Artikel sein soll einfach ein entsprechendes "where" ergänzen.

Greetz Data

Ykcim 24. Jun 2010 14:45

AW: Sortierung
 
Liste der Anhänge anzeigen (Anzahl: 2)
Was bedeutet #3??? :cyclops:

Ich habe zur Veranschaulichung die Tabelle und das gewünschte Abfrageergebnis als Dati angehängt...

Vielen Dank für Eure Mühen!

Ykcim

DeddyH 24. Jun 2010 14:46

AW: Sortierung
 
@DataCool: Damit bekommst Du aber wieder alle DS zur ArtikelNr, er will ja nur die neuesten.

[edit] @Ykcim: #3 bedeutet Post Nr 3. [/edit]

DataCool 24. Jun 2010 14:46

AW: Sortierung
 
@Detlef:

DAnn um Select Top 1 from .....

Greetz

mkinzler 24. Jun 2010 14:47

AW: Sortierung
 
Zitat:

Was bedeutet #3???
Beitrag Nr. 3

mkinzler 24. Jun 2010 14:47

AW: Sortierung
 
Zitat:

Zitat von DataCool (Beitrag 1031334)
@Detlef:

DAnn um Select Top 1 from .....

Greetz

Dann bekommt er nur einen DS und nicht einen Pro Artikel

Ykcim 24. Jun 2010 14:49

AW: Sortierung
 
@ DataCool

Bei der Version bekomme ich alle Kommentare. Ich brauche aber ein Ergebnis, bei dem ich für jeden Artikel nur ein Kommentar bekomme (nämlich den jüngsten).

Ykcim

DeddyH 24. Jun 2010 14:51

AW: Sortierung
 
Nun sag mir doch mal, ob Du meinen Vorschlag ausprobiert hast und ob da irgendwelche Fehlermeldungen kommen.

Ykcim 24. Jun 2010 14:52

AW: Sortierung
 
Musste mich gerade erst zurechtfinden...

Ich habe Deinen Vorschlag leider nicht ganz verstanden, da ich ja nur eine Tabelle habe. Sollen Tabelle A und B die gleichen sein?

DeddyH 24. Jun 2010 14:53

AW: Sortierung
 
Ja, deshalb ja die 2 Aliase. Du musst nur "Tabelle" durch den echten Tabellennamen ersetzen.

mkinzler 24. Jun 2010 14:54

AW: Sortierung
 
Zitat:

Zitat von Ykcim (Beitrag 1031342)
Musste mich gerade erst zurechtfinden...

Ich habe Deinen Vorschlag leider nicht ganz verstanden, da ich ja nur eine Tabelle habe. Sollen Tabelle A und B die gleichen sein?

Es handelt sich um 2 Instanzen der selben Tabelle

Ykcim 24. Jun 2010 14:55

AW: Sortierung
 
Ich habe es gerade einfach ausprobiert - bevor ich Deinen letzten Beitrag gelesen hatte...

ES KLAPPT

SQL-Code:
SELECT
  Datum, Verfasser, ArtikelNr, Kommentar
FROM
  kommentterminV
WHERE Datum = (
  SELECT
    MAX(Datum)
  FROM
    kommentterminV
  WHERE kommentterminV.ArtikelNr = kommentterminV.ArtikelNr)
Das brachte das gewünschte Ergebnis ein.

Vielen Dank!!!

Ykcim

DataCool 24. Jun 2010 14:56

AW: Sortierung
 
ok, jetzt habe ich verstanden was gesucht wird ...
Wer lesen kann ist klar im Vorteil:roll:

Sollte ein :
Code:
Select xyz from Tablename group by ArtikelNr order by ArtikelNr desc, Datum desc
nicht zum gewünschten Ergebnis führen ?

Ansonsten musst Du wohl wirklich auf ineinander verkettete Abfragen zurück greifen.

Gruß Data

DeddyH 24. Jun 2010 14:57

AW: Sortierung
 
Das klappt ohne die Aliase? Das wundert mich jetzt aber schon ein wenig, aber gut.

Ykcim 24. Jun 2010 15:08

AW: Sortierung
 
@ DataCool

Das hatte ich schon versucht, aber das funktionierte auch nicht.
Ich habe die andere Lösung gerade in mein Programm eingebaut und sie funzt!!!

@ All
Noch einmal vielen Dank für die tolle Kommunikation und Hilfe! :-D

Ykcim

Ykcim 29. Jun 2010 07:49

AW: Sortierung
 
Zu früh gefreut...

Guten Morgen,

nach der anfänglichen Freude, dass der nachstehende Code funktioniert, muss ich heute leider ernüchtert feststellen, dass dme nicht so ist.

Hier ersteinmal der Code:

SQL-Code:
SELECT
  Datum, Verfasser, ArtikelNr, Kommentar
FROM
  kommentterminV
WHERE Datum = (
  SELECT
    MAX(Datum)
  FROM
    kommentterminV
  WHERE kommentterminV.ArtikelNr = kommentterminV.ArtikelNr)
Das Problem ist, dass ich nur die Kommentare über alle Artikel bekomme, die das jüngste Datum haben. Das heißt, wenn es zu 10 Artikel einen "neusten" Kommentar vom 27.06.2010 gibt und von einem elften Artikel einen Kommentar neusten Kommentar vom 28.06.2010 gibt, dann wir mir nur der Kommentar der vom 28.06.2010 angezeigt und die anderen Kommentare bleiben unberücksichtigt...

Kann mir jemand sagen, was ich an dem Code verändern muss.


Vielen Dank

Ykcim

schlecki 29. Jun 2010 07:54

AW: Sortierung
 
probier mal

SQL-Code:
SELECT
  A.Datum, A.Verfasser, A.ArtikelNr, A.Kommentar
FROM
  kommentterminV A
WHERE Datum = (
  SELECT
    MAX(B.Datum)
  FROM
    kommentterminV B.
  WHERE A.ArtikelNr = B.ArtikelNr)
das sollte klappen...

Ykcim 29. Jun 2010 08:00

AW: Sortierung
 
Hallo,

Danke für die Antwort,

das bringt mir das gleiche Ergebnis. Ich habe auch nicht erkannt, wo der Unterschied liegt und habe es deshlab einfach rauskopiert und ausprobiert - aber das Ergebnis ist das gleiche... es werden nur die Kommentare mit dem neusten Datum überhaupt angezeigt, und die Kommentare von anderen Artikeln, deren neustes Datum älter ist, bleiben unberücksichtigt...

Ykcim

DeddyH 29. Jun 2010 08:20

AW: Sortierung
 
Das kann ich hier nicht nachvollziehen (MySQL 5.1.41). Welchen Typ hat denn Datum? Obwohl das eigentlich egal sein müsste.

Ykcim 29. Jun 2010 09:17

AW: Sortierung
 
Liste der Anhänge anzeigen (Anzahl: 2)
Das Datum hat das Forma DateTime

Ich habe es jetzt in zwei Abfragen gelöst, die ich in meinem Programm dann zusammengebracht habe...

SQL-Code:
SELECT
  max(Datum), Verfasser, ArtikelNr, Kommentar
FROM
  kommentterminV
group by ArtikelNr
order by datum DESC
Hier wird das richtige Datum und zur richtigen ArtikelNr herangezogen. Kommentar und Verfasser sind jedoch falsch, da sie von dem ersten Kommentar stammen.

SQL-Code:
SELECT
  Datum, Verfasser, ArtikelNr, Kommentar
FROM kommentterminV
Hier habe ich alle Kommentare. Aus der Kombination Datum und ArtikelNr kann ich in meinem Programm den entsprechenden Kommentar rausholen.

Wenn es eine elegantere Lösung gibt, bin ich dafür immer zu haben. Schön ist nämlich was anderes...

Ich habe noch einmal zwei Bilder mitgeschickt. In dem ersten wird die komplette Tabelle dargestellt und ich habe die gewünschten Ergebnisse rot markiert.

In dem zweiten Bild findet Ihr das Ergebnis des in #23 geposteten Code.

Ykcim

DeddyH 29. Jun 2010 09:19

AW: Sortierung
 
Und wie sieht das Ergebnis der Abfrage aus #3 mit den beiden Aliasen aus?

Ykcim 29. Jun 2010 09:34

AW: Sortierung
 
Sorry, aber ich verstehe Deine Frage nicht.

Ist das nicht das gleiche?

Das ist Dein Code aus #3:
SQL-Code:
SELECT
  Datum, Verfasser, ArtikelNr, Kommentar
FROM
  Tabelle A
WHERE Datum = (
  SELECT
    MAX(Datum)
  FROM
    Tabelle B
  WHERE B.ArtikelNr = A.ArtikelNr)
Da ich nur eine Tabelle habe, habe ich der Tabelle A und der Tabelle B meinen Tabellennamen KommentterminV gegeben.

SQL-Code:
 SELECT
  Datum, Verfasser, ArtikelNr, Kommentar
FROM
  kommentterminV
WHERE Datum = (
  SELECT
    MAX(Datum)
  FROM
    kommentterminV
  WHERE kommentterminV.ArtikelNr = kommentterminV.ArtikelNr)
Das Ergbnis ist das, was ich vorher eingestellt habe (IST-Ergebnis)

Habe ich das falsch verstanden?

Ykcim

DeddyH 29. Jun 2010 09:44

AW: Sortierung
 
Du brauchst für den Vergleich 2 Instanzen derselben Tabelle, deshalb die Aliase. Versuch es doch einfach mal.

idefix2 29. Jun 2010 09:57

AW: Sortierung
 
SQL-Code:
 SELECT
  Datum, Verfasser, ArtikelNr, Kommentar
FROM
  kommentterminV A
WHERE Datum = (
  SELECT
    MAX(Datum)
  FROM
    kommentterminV B
  WHERE A.ArtikelNr = B.ArtikelNr)

DeddyH 29. Jun 2010 10:00

AW: Sortierung
 
Damit hast Du #3 wörtlich zitiert :zwinker:

Ykcim 29. Jun 2010 10:13

AW: Sortierung
 
Würde ich ja gerne...

..aber ich weiß leider nicht wie das gehen soll... :oops:

Ich habe so noch nicht gearbeitet. Wie baue ich zwei Instanzen auf und wie greife ich von einer auf die andere zu?

DeddyH 29. Jun 2010 10:14

AW: Sortierung
 
Du musst doch nur den SQL-Code aus #31 kopieren. Ist das so schwer?

idefix2 29. Jun 2010 10:17

AW: Sortierung
 
Code:
Damit hast Du #3  wörtlich zitiert
Nicht ganz wörtlich - ich glaube, er hat möglicherweise nicht verstanden, dass in "Tabelle A" Tabelle sein Tabellenname und A der Alias ist, deshalb habe ich das ganze mit seinem richtigen Tabellennamen wiederholt.

DeddyH 29. Jun 2010 10:20

AW: Sortierung
 
Stimmt, ich hätte vielleicht <Tabellenname> schreiben sollen.

Ykcim 29. Jun 2010 10:21

AW: Sortierung
 
Liste der Anhänge anzeigen (Anzahl: 1)
Nunja, wenn man bis heute nicht verstanden hat, dass das einfache hinzufügen von einem A oder B gleichbedeutend ist mit zwei Instanzen, dann, JA!

Ich dachte, dass das A und B zur Erklärung dienen sollte und mich die ganze Zeit gefragt, was Du mit Alias gemeint hattest...

Jetzt weiß ich es!

DAS ERGEBNIS IST KLASSE!

Genauso wollte ich es haben!

Vielen Dank für die Hilfe und Geduld ;-)

Gruß
Ykcim

DeddyH 29. Jun 2010 10:22

AW: Sortierung
 
Na, jetzt weißt Du es ja fürs nächste Mal :zwinker:


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:12 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