Delphi-PRAXiS
Seite 9 von 9   « Erste     789   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Performance verbessern (https://www.delphipraxis.net/82215-performance-verbessern.html)

Luncustaf 14. Dez 2006 20:07

Re: Performance verbessern
 
Liste der Anhänge anzeigen (Anzahl: 1)
den hier :)

mkinzler 14. Dez 2006 20:09

Re: Performance verbessern
 
Wie es aussieht unterstützt MySQL 4 eine Subselects :-(
Du könntest Versuchen noch die Rezepte zu den Unterkategorien hinzuzujoinen und dann zu Gruppieren.

Luncustaf 14. Dez 2006 20:21

Re: Performance verbessern
 
so hab das nunmal so versucht - nun muss noch ne schöhnheitsop dran

Count(r.NAME) bringt mir den wert 7 - sollte aber 1 sein :/ - ich denke mal weiles sieben zutaten sind - aber ich steig da so langsam net mehr so richtig durch :/

SQL-Code:
SELECT U.*, Count(r.NAME)
FROM kategorien U
JOIN kategorien K, rezept r, zutat z ON K.ID = U.KAT_ID AND U.KAT_ID = r.KAT_ID AND U.iPos = z.iPos AND z.REZ_ID = r.ID
GROUP BY U.ID
ORDER BY K.iPos, U.iPos
dann hätte ich zumindestmal die unterkategorie - würde noch die hauptkategorie fehlen :D

gruß

mkinzler 14. Dez 2006 20:31

Re: Performance verbessern
 
Ich dachte eher an
SQL-Code:
SELECT COUNT(R.ID)
FROM REZEPTE R JOIN kategorien U ON R.KAT_ID = U.ID
LEFT JOIN kategorien K ON U.ID = K.KAT_ID
GROUP BY K.ID

Luncustaf 16. Dez 2006 11:58

Re: Performance verbessern
 
hi,

hab es nun so gemacht - da die anderen lösungen entweder auffem server net laufen, ich da net durchsteige, oder nicht das gewünschte liefern :(
wenn ich das nun laufen alsse sagt er mir das er das feld t.name nicht findet.
in mysqlfront lüppt alles - wieso unter delphi net?

Delphi-Quellcode:
sqlq.SQL.Add('SELECT k.name, Count(k.name) AS kanzahl from kategorien k, rezept r WHERE k.KAT_ID = r.KAT_ID AND k.iPos = r.iPos '
                 +' GROUP BY k.name '
                 +' UNION '
                 +' SELECT t.name, Count(t.name) AS tanzahl FROM kategorien t, rezept u WHERE t.iPos = u.KAT_ID AND t.KAT_ID is NULL '
                 +' GROUP BY t.name');
gruß

marabu 16. Dez 2006 16:39

Re: Performance verbessern
 
Hallo,

das folgende SELECT Statement liefert mir alle für den Aufbau der TreeView benötigten Informationen:

SQL-Code:
SELECT U.*, COALESCE(R.ANZAHL, S.ANZAHL, 0)
FROM Kategorien U
LEFT OUTER JOIN Kategorien K ON K.ID = U.KAT_ID
LEFT OUTER JOIN (
  SELECT KAT_ID, COUNT(*) AS ANZAHL
  FROM REZEPTE
  GROUP BY KAT_ID
) AS R ON R.KAT_ID = U.ID
LEFT OUTER JOIN (
  SELECT K2.KAT_ID, COUNT(*) AS ANZAHL
  FROM REZEPTE R2
  LEFT OUTER JOIN Kategorien K2 ON K2.ID = R2.KAT_ID
  GROUP BY K2.KAT_ID
) AS S ON S.KAT_ID = U.ID
ORDER BY K.iPos, U.iPos
Ich habe bei meinem Statement den Tabellenaufbau aus meinem Beitrag #50 zu Grunde gelegt. Getestet habe ich mit MySQL Version 4.1.10 und dem MySQL Browser - aber nicht sehr lange...

Freundliche Grüße

Luncustaf 16. Dez 2006 17:12

Re: Performance verbessern
 
hi,

danke für deine bemühungen - ich gugger mal das ich die mysql version auf dem server geupdatet bekomme - weil die answeisung bei mir wieder fehler auswirft bei dem ersten subselect.

gruß

marabu 16. Dez 2006 19:33

Re: Performance verbessern
 
Subselects gehen ab MySQL 4.1 - habe gerade entdeckt, dass dein Provider 4.0.23 fährt. Ohne Subselects müsste ich wohl eine oder mehrere Zwischentabellen verwenden um das gleiche Ergebnis zu erhalten. Wenn du kein Upgrade erhältst, dann solltest du vielleicht auf die Anzeige der Rezepte-Anzahl im Knoten verzichten und diese Sicht als gesonderte Auswertung anbieten.

Schönes Wochenende

Luncustaf 7. Jan 2007 16:40

Re: Performance verbessern
 
Liste der Anhänge anzeigen (Anzahl: 1)
hi marabu,

so nach weihnachten sylvester und dem ganzen stress bin ich nun mal wieder dazugekommen mich meinem problem zu widmen.
klappt nun soweit auch alles ganz gut nur 2 kleine problemchen hab ich noch.

1. ich bekomme mit deiner abfrage zwar die gesamtanzahl der rezepte in den kategorien aber nicht die anzahl der rezepte in den unterkategorien.


2. wie füge ich nun den jeweiligen kategorien die richtige unterkategorie zu? wenn ich es so wie immer mache

Delphi-Quellcode:
   with tv_kategorien.Items do
   begin
     t := AddChildObject(nil,sqlq.FieldByName('NAME').AsString + ' ('+sqlq.fieldbyname('COALESCE(R.ANZAHL, S.ANZAHL, 0)').AsString+')', Pointer(sqlq.FieldByName('iPos').AsInteger));
     AddChildObject(t,sqlq.fieldbyname('NAME?').AsString+ ' (' + sqlq.fieldbyname('COALESCE(R.ANZAHL, S.ANZAHL, 0)?').AsString +')', Pointer(sqlq.FieldByName('iPos').AsInteger));
   end;
   sqlq.Next;
dann ieht es so wie auf dem bild aus - mir ist klar das ich bei den fieldbyname wo die fragezeichen mit dabei stehen etwas anderes reinschreiben muss aber ich weis nicht genau was - oder das ich eine abfrage machen muss. kannst du mir da vllt nochmal auf die sprünge helfen?

gruß und ein gutes neues jahr
Simon


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:37 Uhr.
Seite 9 von 9   « Erste     789   

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