AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Performance verbessern

Performance verbessern

Ein Thema von Luncustaf · begonnen am 8. Dez 2006 · letzter Beitrag vom 7. Jan 2007
Antwort Antwort
Seite 8 von 9   « Erste     678 9   
Luncustaf

Registriert seit: 31. Jan 2003
80 Beiträge
 
Delphi 6 Enterprise
 
#71

Re: Performance verbessern

  Alt 14. Dez 2006, 18:27
oh - dll programmierung - hab ich mich mal kurz mit beschäftigt und erstmal gar nichts verstanden
ich habs nun so gemacht ist denke ich auch ok.

Delphi-Quellcode:
              sqlt.Post;
              sqlq.SQL.Clear;
              sqlq.SQL.Add('SELECT ID FROM rezept ORDER BY ID ASC');
              sqlq.Open;
              sqlq.Last;
              lastid := sqlq.FieldValues['ID'];
              sqlq.Close;
das klappt auch soweit kein problem - ich hab aber eher noch das problem das ich mit den abfragen gar nicht klar komme.
hab zwar das mit dem join soweit glaube ich verstanden nur raff ich das mit dem einträge zählen irgendwie nicht.
wie bekomme ich nun raus wieviele rezept in einer hauptkategorie sind und wieviel in der dazugehörigen unterkategorie.
ich hab die abfrage von dir (@marabu) probiert umzusetzen aber irgendwie steig ich da nicht richtig durch.

wenn ich nur die tabellen rezept und kategorien vergleiche dann bekomme ich doch nicht die anzahl der rezepte in unterkategorien raus?

gruß

Edit: ich hab nun mal bisserl probiert das angelese umzusetzen - stimmt noch net ganz - aber probieren kostet nix - net das ihr denkt ich lass mir alles servieren.

SQL-Code:
SELECT k.NAME, Count(r.KAT_ID) FROM kategorien k
LEFT JOIN rezept r ON r.KAT_ID = k.KAT_ID GROUP BY k.NAME

UNION

SELECT k.NAME, Count(z.iPos) FROM kategorien k, rezept r
LEFT JOIN zutat z ON z.iPos = k.iPos AND z.REZ_ID = r.ID GROUP BY k.NAME
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#72

Re: Performance verbessern

  Alt 14. Dez 2006, 19:10
Hi,

besser so:

Delphi-Quellcode:
begin
  // ...
  with sqlt do
  begin
    Post;
    SQL.Text := 'SELECT LAST_INSERT_ID()';
    try
      Open;
      lastId := Fields[0].AsInteger;
    finally
      Close;
    end;
  // ...
end;
Das Zählen der Einträge zu den einzelnen Kategorien habe ich in meinem SQL-Code aus Beitrag #59 unterlassen, weil ich es gar nicht brauche. Es ist viel einfacher beim Eintragen der Kategorien die entsprechenden Knoten im Baum zu zählen.

Freundliche Grüße
  Mit Zitat antworten Zitat
Luncustaf

Registriert seit: 31. Jan 2003
80 Beiträge
 
Delphi 6 Enterprise
 
#73

Re: Performance verbessern

  Alt 14. Dez 2006, 19:25
Zitat von marabu:
Hi,

...Es ist viel einfacher beim Eintragen der Kategorien die entsprechenden Knoten im Baum zu zählen.

Freundliche Grüße
also ich glaub so langsam bin ich ganz doof.
oder ich denk einfach komplett in die falsche richtung
wenn ich die kategorien eintrage in die treeview - dann hab ich darin doch nicht die anzahl der rezepte drin stehen?
wenn ich ich nun 10 hackfleisch rezepte habe dann hab ich doch trotzdem nur einmal den eintrag hackfleisch im baum der treeview?
wie soll ich anhand davon wissen wieviele rezepte ich in dieser kategorie habe?
sorry für die vielen fragen.

gruß
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#74

Re: Performance verbessern

  Alt 14. Dez 2006, 19:30
Aber wenn die Kategorie Fleisch die Unterkategorin Hackfleisch und Braten hätte und dHackfleisch 10 un Braten 20 Einträge dann hätte Fleisch 30.
Markus Kinzler
  Mit Zitat antworten Zitat
Luncustaf

Registriert seit: 31. Jan 2003
80 Beiträge
 
Delphi 6 Enterprise
 
#75

Re: Performance verbessern

  Alt 14. Dez 2006, 19:35
hi,

jo das ist soweit klar - aber trotzdem stehen diese informationen nicht in der tabelle kategorien die mit der abfrage nur abgefragt wird - wenn ich es richtigen verstanden hab macht marabu in der abfrage einen LEFT OUTER JOIN innerhalb der gleichen tabelle

SQL-Code:
SELECT U.*
FROM kategorien U
LEFT OUTER JOIN kategorien K ON K.ID = U.KAT_ID
ORDER BY K.iPos, U.iPos
dort stehen aber nur die kategorien + unterkategorien drin - die tabelle kann also gar nicht wissen wieviele rezepte schon eingetragen wurden oder nicht?
und wenn ich komplett falsch liege wie bekomme ich dan nraus wieviel rezepte in den utnerkategorien gespeichert sind so das ich bei Fleisch 30 anfügen kann und bei hackfleisch 10 und bei braten 20.


liebe grüße ein verwirrter Luncustaf
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#76

Re: Performance verbessern

  Alt 14. Dez 2006, 19:40
Hast ja Recht - ich habe Kategorien und Rezepte gedanklich in einen Topf geworfen. Natürlich musst du die Rezepte zählen.

Sorry für die Verwirrung - das kommt davon wenn man zuviele Dinge gleichzeitig macht...
  Mit Zitat antworten Zitat
Luncustaf

Registriert seit: 31. Jan 2003
80 Beiträge
 
Delphi 6 Enterprise
 
#77

Re: Performance verbessern

  Alt 14. Dez 2006, 19:52
hi,

kein problem

SQL-Code:
SELECT U.*
FROM kategorien U
LEFT OUTER JOIN rezept K ON K.KAT_ID = U.KAT_ID
GROUP BY K.KAT_ID
hab das nun so gemacht bekomme ansatzweise was brauchbares raus - nämlich zwei datensätze. das ist aber das problem ich sollte nur einen bekommen weil in der tabelle rezept nur 1 datensatz steht.
siehe bild.


gruß
Miniaturansicht angehängter Grafiken
rezept_123.jpg  
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#78

Re: Performance verbessern

  Alt 14. Dez 2006, 19:58
Kombiniere doch mal die beiden Abfragen:

SQL-Code:
Select Count(ID) from Rezept where Kat_ID in(
SELECT U.ID
FROM kategorien U
LEFT OUTER JOIN kategorien K ON K.ID = U.KAT_ID
ORDER BY K.iPos, U.iPos)
Markus Kinzler
  Mit Zitat antworten Zitat
Luncustaf

Registriert seit: 31. Jan 2003
80 Beiträge
 
Delphi 6 Enterprise
 
#79

Re: Performance verbessern

  Alt 14. Dez 2006, 20:02
hi,

bekomm ich einen fehler aber ich glaube das liegt eher daran das die mysql version des servers wo die db im inet lüppt die hier ist

Server version 4.0.23-Max-log gruß
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#80

Re: Performance verbessern

  Alt 14. Dez 2006, 20:05
Was für ein Fehler?
Markus Kinzler
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:58 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz