![]() |
Re: Performance verbessern
Liste der Anhänge anzeigen (Anzahl: 1)
den hier :)
|
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. |
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:
dann hätte ich zumindestmal die unterkategorie - würde noch die hauptkategorie fehlen :D
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 gruß |
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 |
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:
gruß
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'); |
Re: Performance verbessern
Hallo,
das folgende SELECT Statement liefert mir alle für den Aufbau der TreeView benötigten Informationen:
SQL-Code:
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...
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 Freundliche Grüße |
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ß |
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 |
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:
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?
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; gruß und ein gutes neues jahr Simon |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:37 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