Delphi-PRAXiS
Seite 1 von 3  1 23      

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 8. Dez 2006 18:20

Datenbank: mysql • Version: 5.0 • Zugriff über: zeos

Performance verbessern
 
hi,

hab hier den code um für mein onlinekochbuch - die Anzahl der rezepte aus der datenbank zu lesen. zu beginn hab ich alles per zeos ausgelesen, nun bin ich soweit das ich die kategorie und die unterkategorie die sich nicht ändern lokal auf festplatte habe und nur noch die Anzahl der rezepte per zeos auslesen. ich habe mir dadurch eigentlich eine geschwindigkeitsverbesserung erhofft - hat aber leider nicht allzuviel gebracht, eigentlich gar nichts.

Delphi-Quellcode:
  i,a : integer;
  namen : TStringList;
  ini : TIniFile;
begin
  namen := TStringList.Create;
  ini := TIniFile.Create(extractfilepath(paramstr(0))+'unterkategorien.ini');
  databasel;
  sqlq.Active := False;
  sqlq.SQL.Clear;
  sqlq.SQL.Add('SELECT name FROM kategorie');
  sqlq.Active := True;
  sqlq.First;
  while not sqlq.Eof do
  begin
     namen.Add(sqlq.FieldByName('name').AsString);
     sqlq.Next;
  end;//sqlq.eof
  sqlq.Active := False;
  namen.SaveToFile(extractfilepath(paramstr(0))+'kategorie.txt');
  for i := 0 to namen.Count -1 do
  begin
     sqlqrez.Active := False;
     sqlqrez.SQL.Clear;
     sqlqrez.SQL.Add('SELECT Count(name) FROM rezepte WHERE kategorie="'+namen.Strings[i]+'"');
     sqlqrez.Active := True;
     with tv_rezept.Items do
     begin
       t := AddChild(nil,namen.Strings[i] + ' ('+sqlqrez.fieldbyname('Count(name)').AsString+')');
     end;
     for a := 0 to 8 do //ab hier geht denke ich die performance drauf
     begin
       if not (ini.ReadString(namen.Strings[i],'unter'+IntToStr(a),'') = '') then                              
       begin
         sqlqrez.Active := False;
         sqlqrez.SQL.Clear;
         sqlqrez.SQL.Add('SELECT Count(name) FROM rezepte WHERE unterkat="'+ini.ReadString(namen.Strings[i],'unter'+IntToStr(a),'')+'" AND kategorie="'+namen.Strings[i]+'"');
         sqlqrez.Active := True;
         tv_rezept.Items.AddChild(t,ini.ReadString(namen.Strings[i],'unter'+IntToStr(a),'')+ ' (' + sqlqrez.fieldbyname('Count(name)').AsString +')' );
         sqlqrez.Active := False;
       end;//if not ini....
     end;//for a
  end;//for i
die inifile sieht so aus

Delphi-Quellcode:
[Eier- & Mehlspeisen]
unter0=Crêpes
unter1=Deftiges & Delikates
unter2=Omelettes
unter3=Pfannkuchen
unter4=Sonstiges
[Auflauf & Co.]
unter0=Sonstiges
unter1=Gratins
unter2=Aufläufe
unter3=Soufflès
usw...
hmm ich weis nicht genau was ich noch daran verbessern könnte um die ganze sache zu beschleunigen so das man nicht ca ~20sek warten muss bis die anzahl aller rezepte ausgelesen und die TreeView aufgebaut ist.
hat evtl jemand einen ansatz?

mfg

jbg 8. Dez 2006 18:24

Re: Performance verbessern
 
Schonmal den Code mit
Delphi-Quellcode:
tv_rezept.Items.BeginUpdate
try
  ...
finally
  tv_rezept.Items.EndUpdate;
end;
optimiert?

Luncustaf 8. Dez 2006 18:28

Re: Performance verbessern
 
hi,

wo genau muss ich das einbauen? bzw was bringt/bewirkt es? :)

danke

jbg 8. Dez 2006 18:29

Re: Performance verbessern
 
Zitat:

Zitat von Luncustaf
wo genau muss ich das einbauen?

Alles ab "for i := 0 to namen.Count -1 do" muss dort hin, wo das "..." steht.

Zitat:

was bringt/bewirkt es? :)
Taste F1

Luncustaf 8. Dez 2006 18:33

Re: Performance verbessern
 
hmm ok,

hab ich eingebaut - bringt aber auch net wirklich was - also ich hab keine spürbare verbesserung gemerkt :(

jbg 8. Dez 2006 18:59

Re: Performance verbessern
 
Vielleicht dauern die SQL Abfragen einfach zu lange.

Luncustaf 8. Dez 2006 19:04

Re: Performance verbessern
 
hmm das hab ich mir auch schon gedacht - wüsste aber nicht wie ich die verbessern könnte :(

muss ich mir wohl anders helfen. falls evtl jemand nen vorschlag hat die SQL-Abfragen zu verbessern - bin für alles offen :)

danke dennoch für deine schnelle Hilfe

gruß

mkinzler 9. Dez 2006 11:04

Re: Performance verbessern
 
Ich würde keine lokale Speicherung verwenden, bringt imho keine Performancesteigerung, kompliziert die Sache nur.

Schon mal

SQL-Code:
SELECT Count(name) FROM rezepte WHERE kategorie in ( ...)
versucht?

Luncustaf 9. Dez 2006 12:29

Re: Performance verbessern
 
hi,

hab ich nun eingebaut - hmm kann nun nicht sagen ob es schneller geht oder nicht - die datenbank braucht trotzdem "lange" zum laden - ich habe esn un so gemacht das die db einmal am anfang des programms geladen wird.
wäre natürlich trotzdem super wenn es noch ein bisschen schneller gehen würde ;)

wer will kann es sich auch mal selber anschauen

www.la-honda.de/kochen.rar
www.la-honda.de/kochen_dll.rar


gruß

Bernhard Geyer 9. Dez 2006 18:59

Re: Performance verbessern
 
Wenn Du die beiden Abfragen als parametrisierte Abfragen auslegst und beim ersten mal preparste sollte einiges an Performancesteigerung drin sein.

Luncustaf 10. Dez 2006 10:07

Re: Performance verbessern
 
hi,

hört sich interessant an - ich hab mal danach gesucht - kann aber nicht wirklich was damit anfangen.

Zitat:

To create parameters at runtime, you can use the

ParamByName method to assign values to a parameter based on its name (not available for TADOQuery)
Params or Parameters property to assign values to a parameter based on the parameter's ordinal position within the SQL statement.
Params.ParamValues or Parameters.ParamValues property to assign values to one or more parameters in a single command line, based on the name of each parameter set.

The following code uses ParamByName to assign the text of an edit box to the :Capital parameter:

SQLQuery1.ParamByName('Capital').AsString := Edit1.Text;

The same code can be rewritten using the Params property, using an index of 0 (assuming the :Capital parameter is the first parameter in the SQL statement):

SQLQuery1.Params[0].AsString := Edit1.Text;

The command line below sets three parameters at once, using the Params.ParamValues property:

Query1.Params.ParamValues['Name;Capital;Continent'] :=
VarArrayOf([Edit1.Text, Edit2.Text, Edit3.Text]);

Note that ParamValues uses Variants, avoiding the need to cast values.
evtl ist auch mein englisch zu schlecht das ich es genau verstehe wie es gemeint ist.
kannst du mir vllt einen kleinen Anstoss geben - bitte nicht den ganzen code - evtl auch nur erklären - bin ja hier zum lernen ;) abschreiben bringt da nichts.

gruß

marabu 10. Dez 2006 11:25

Re: Performance verbessern
 
Hallo,

beim Zugriff auf deine Datenbank muss dein Programm versuchen alle Informationen mit möglichst wenigen Queries zu besorgen. In deinem Fall würde eine einzige Query genügen, was den Ladeprozess ungemein beschleunigen sollte. Informiere dich mal über die GROUP BY Klausel - und zeige mal das Schema (Datenmodell) deiner Datenbank.

Grüße vom marabu

Luncustaf 10. Dez 2006 16:28

Re: Performance verbessern
 
hi,

also habe mich nun darüber infomiert - sehe ich es richtig das ich zb die unterkategorien mit group bei sortieren soll, so das das zählen schneller geht?

ich habe momentan 4 tabellen,
Delphi-Quellcode:
kategorie
   name //namen der kategorien

unterkat
   kat  //hauptkategorie -> aus tabelle kategorie
   unter //name der unterkategorie

rezepte
   name   //name des rezepts
   unterkat //dazu gehörige unterkategorie -> aus tabelle unterkat
   kategorie //hauptkategorie -> aus tabelle kategorie

zutaten
   kategorie //hauptkategorie -> aus tabelle kategorie
   unterkat //dazu gehörige unterkategorie -> aus tabelle unterkat
   name     //name des rezepts
   zutat    //name der zutat
   menge    //menge der zutat
   mass     //maß der zutat
   zubereitung //zubereitung als BLOB
die zwei tabellen kategorie und unterkat brauche ich momentan eigentlich nicht mehr da ich die werte dieser beiden lokal liegen habe. ist das das was du wolltest?

gruß

mkinzler 10. Dez 2006 16:31

Re: Performance verbessern
 
Die lokale Speicherung von Tabllen, bringt m.E. nichts. Wie sehen die Abftagen aus, was soll abgefragt werden?

Luncustaf 10. Dez 2006 16:34

Re: Performance verbessern
 
hi,

habe nicht die tabellen sondern nur die werte dieser in einer txt und ini datei abgelegt in der hoffnung das es dadurch schneller geht.
momentan sieht meine abfrage so aus.

Delphi-Quellcode:
tv_rezept.Items.BeginUpdate;
try
  frm_laden.Show;
  frm_laden.Label1.Caption := 'Lade Datenbank';
  Application.ProcessMessages;
  for i := 0 to namen.Count -1 do
  begin
     sqlqrez.Active := False;
     sqlqrez.SQL.Clear;
     sqlqrez.SQL.Add('SELECT Count(name) FROM rezepte WHERE kategorie in ("'+namen.Strings[i]+'")');
     sqlqrez.Active := True;
     with tv_rezept.Items do
     begin
       t := AddChild(nil,namen.Strings[i] + ' ('+sqlqrez.fieldbyname('Count(name)').AsString+')');
     end;
     for a := 0 to 8 do
     begin
       if not (ini.ReadString(namen.Strings[i],'unter'+IntToStr(a),'') = '') then
       begin
         unterkat.Add(ini.ReadString(namen.Strings[i],'unter'+IntToStr(a),''));
       end;
     end;//for a :=
     for a := 0 to unterkat.Count -1 do
     begin
         sqlqrez.Active := False;
         sqlqrez.SQL.Clear;
         sqlqrez.SQL.Add('SELECT Count(name) FROM rezepte WHERE unterkat in ("'+unterkat.Strings[a]+'") AND kategorie in ("'+namen.Strings[i]+'") GROUP BY unterkat');
         sqlqrez.Active := True;
         tv_rezept.Items.AddChild(t,unterkat.Strings[a]+ ' (' + sqlqrez.fieldbyname('Count(name)').AsString +')' );
         sqlqrez.Active := False;
     end;//for a
     unterkat.Clear;
     frm_laden.progress.StepBy(10);
  end;//for i
finally
  tv_rezept.Items.EndUpdate;
  frm_laden.Close;
end;
wie oben beschrieben ist das problem das es ziemlich lange braucht alle daten zu laden die aich abfrage.

gruß

mkinzler 10. Dez 2006 16:40

Re: Performance verbessern
 
Meine Frage, war was du abffragen willst und nicht wie du es jetzt macht.

Luncustaf 10. Dez 2006 16:45

Re: Performance verbessern
 
Liste der Anhänge anzeigen (Anzahl: 1)
ich will in einer treeview meine kategorien mit den dazugehörigen unterkategorien anzeigen - hinter den jeweiligen kategorien und unterkategorien soll in klammen angezeigt werden wieviel rezepte es in dieser kategorie bzw. unterkategorie schon gibt.

damit man sich net durchklicken muss um auf gut glück ein rezept zu finden.

klappt auch soweit ganz gut nur soll die geschwindigkeit des ladens verbessert werden.

mkinzler 10. Dez 2006 16:53

Re: Performance verbessern
 
Dann würde ich das per SQL abfragen:

SQL-Code:
select count( id) from rezepte where kategorie = :kat;
SQL-Code:
select count( id) from rezepte where ukat = :ukat;

Luncustaf 10. Dez 2006 16:58

Re: Performance verbessern
 
hmm das mache ich doch momentan eigentlich auch oder nicht?

kategorien:

Delphi-Quellcode:
     sqlqrez.Active := False;
     sqlqrez.SQL.Clear;
     sqlqrez.SQL.Add('SELECT Count(name) FROM rezepte WHERE kategorie in ("'+namen.Strings[i]+'")');
     sqlqrez.Active := True;
unterkategorien:

Delphi-Quellcode:
         sqlqrez.Active := False;
         sqlqrez.SQL.Clear;
         sqlqrez.SQL.Add('SELECT Count(name) FROM rezepte WHERE unterkat in ("'+unterkat.Strings[a]+'") AND kategorie in ("'+namen.Strings[i]+'") GROUP BY unterkat');
         sqlqrez.Active := True;
bei unterkategoriem uss ich die hauptkategorie auch mit anfragen da es zb die unterkategorie grundrezepte in mehreren hauptkategorien gibt.
wenn ich falsch liegen sollte bitte um verbesserung.

gruß

mkinzler 10. Dez 2006 17:04

Re: Performance verbessern
 
Besser wäre aber wie schon erwähnt das ganze parametrisiert zu machen:

Delphi-Quellcode:
    sqlkat.SQL.Text := 'SELECT Count(name) FROM rezepte WHERE kategorie = :kat';
     sqlukat.SQL.Text := 'SELECT Count(name) FROM rezepte WHERE kategorie = :kat and unterkategorie = :ukat';
    ...
     sqlKat.paramByName('kat').Value := namen.Strings[i];
     sqlKat.Open;
   ...
     sqluKat.paramByName('kat').Value := namen.Strings[i];
     sqluKat.paramByName('kat').Value := unterkat.Strings[a];
     sqluKat.Open;

Luncustaf 10. Dez 2006 17:11

Re: Performance verbessern
 
hi,

hab das nun so eingebaut

Delphi-Quellcode:
tv_rezept.Items.BeginUpdate;
try
  frm_laden.Show;
  frm_laden.Label1.Caption := 'Lade Datenbank';
  Application.ProcessMessages;
  for i := 0 to namen.Count -1 do
  begin
     sqlq.Active := False;
     sqlq.SQL.Text := 'SELECT Count(name) FROM rezepte WHERE kategorie= :kat';
     sqlqrez.SQL.Text := 'SELECT Count(name) FROM rezepte WHERE unterkat= :unterkat AND kategorie= :kat GROUP BY unterkat';
     sqlq.ParamByName('kat').Value := namen.Strings[i];
     sqlq.Open;
     with tv_rezept.Items do
     begin
       t := AddChild(nil,namen.Strings[i] + ' ('+sqlq.fieldbyname('Count(name)').AsString+')');
     end;
     for a := 0 to 8 do
     begin
       if not (ini.ReadString(namen.Strings[i],'unter'+IntToStr(a),'') = '') then
       begin
         unterkat.Add(ini.ReadString(namen.Strings[i],'unter'+IntToStr(a),''));
       end;
     end;//for a :=
     for a := 0 to unterkat.Count -1 do
     begin
         sqlqrez.ParamByName('unterkat').Value := unterkat.Strings[a];
         sqlqrez.Open;
         tv_rezept.Items.AddChild(t,unterkat.Strings[a]+ ' (' + sqlqrez.fieldbyname('Count(name)').AsString +')' );
         sqlqrez.Active := False;
     end;//for a
     unterkat.Clear;
     frm_laden.progress.StepBy(10);
  end;//for i
finally
  tv_rezept.Items.EndUpdate;
  frm_laden.Close;
end;
hmm wirklich schneller ist es nun aber auch nicht :(
hab ich vllt irgendetwas falsch gemacht?

gruß

mkinzler 10. Dez 2006 17:21

Re: Performance verbessern
 
Vielleicht sollte ich mal in rot und ganz groß Schreiben: Verzichte auf die Zwischenspeicherung von Daten in Ini-Dateien!!

Hole dir die Inhalte über Abfragen wie du sie benötigst.
Es würde sich hier anbieten zuerst über die Hauptkategorien und in der Schleife über die Unterkategorien zu filtern.

Wie sieht es mit den Indizes aus?

marabu 10. Dez 2006 17:31

Re: Performance verbessern
 
Hi,

Zitat:

Zitat von Luncustaf
... sehe ich es richtig das ich zb die unterkategorien mit group bei sortieren soll, so das das zählen schneller geht? ...

Gruppieren ist nicht Sortieren, aber du denkst schon in die richtige Richtung:

SQL-Code:
SELECT Kategorie, UnterKategorie, COUNT(*) AS Anzahl
FROM Rezepte
GROUP BY Kategorie, UnterKategorie
ORDER BY Kategorie, UnterKategorie
Zitat:

Zitat von Luncustaf
... ich habe momentan 4 tabellen, ... die zwei tabellen kategorie und unterkat brauche ich momentan eigentlich nicht mehr da ich die werte dieser beiden lokal liegen habe. ...

Eigentlich schade. Markus hat es ja auch schon angedeutet: Du solltest deine Tabellen nicht teilweise durch lokale INI- oder Text-Dateien ersetzen. Am meisten gewinnst du, wenn du die Zahl deiner Queries reduzierst. Und an deinem Datenmodell könntest du noch so einiges preofessionalisieren.

Code:
Kategorien: ID, KAT_ID, Name
Rezepte: ID, NAME, KAT_ID
Zutaten: REZ_ID, Position, Bezeichnung, Masseinheit, Menge
Zubereitung: REZ_ID, Text
Dabei wäre noch die Frage, ob du auch die Masseinheiten in einer Lookup-Tabelle vorhalten willst.

Freundliche Grüße

omata 10. Dez 2006 17:35

Re: Performance verbessern
 
Hallo Luncustaf,

ich würde nicht so viele Datenbankanfragen machen. Ich verstehe deine DB-Struktur noch nicht so ganz, vielleicht kannst du ja mal dazu sagen. Wenn du nur einen zweistufigen Baum brauchst, kannst du doch einfach alles mit einer SQL-Abfrage ranholen...

SQL-Code:
SELECT k.name, ka.anzahl, '1' typ
FROM kategorie k
LEFT JOIN (SELECT kategorie AS name, COUNT(*) anzahl
           FROM rezepte
           GROUP BY kategorie) ka
  ON k.name = ka.name

UNION

SELECT kategorie AS name, ra.anzahl, '2' typ
FROM rezepte r
LEFT JOIN (SELECT kategorie AS name, COUNT(*) anzahl
           FROM rezepte
           GROUP BY kategorie) ra
  ON r.name = ra.name

ORDER BY name, typ
Gruss
Thorsten

Luncustaf 10. Dez 2006 18:02

Re: Performance verbessern
 
hi,

viele antworten viel verwirrendes für mich ;)

@omata

deine abfrage verstehe ich nur zur hälfte - was wohl daran liegt das ich mich woh l noch bisserl tiefer mit der SQL geschichte beschäftigen sollte. hmm meine datenbankstruktur lässt sich sicherlich verbessern da ich sie eigentlich einfach mal nach gefühl gemacht habe was ich denn so brauche *schäm*

@marabu

ich habe die ini datei schon wieder rausgeschmissen und die txt-datei folgt als nächstes.
wenn ich dich mit den masseinheiten richtig verstehe dann gehst du davon aus das diese vorgegeben sind - ich lasse diese aber vom benutzer selbst eintragen da es da 1000 verschieden möglichkeiten gibt.

für was steht das Position in deinem modell bei rezepte?

vielen dank für eure anregungen, vorschläge und natürlich die hilfe

gruß

omata 10. Dez 2006 18:06

Re: Performance verbessern
 
Schade ich dachte du probierst mal die SQL-Abfrage aus und schaust dir das Ergebnis an.

Luncustaf 10. Dez 2006 18:07

Re: Performance verbessern
 
Zitat:

Zitat von omata
Schade ich dachte du probierst mal die SQL-Abfrage aus und schaust dir das Ergebnis an.

hi ich probiere sie gerne aus. werde probieren sie an der richtigen stelle einzubauen.
gib mir 5min :)


gruß

omata 10. Dez 2006 18:10

Re: Performance verbessern
 
Du brauchst sie doch nicht in dein Programm einbauen! Schau dir doch erstmal das Ergebnis der Query an.

Luncustaf 10. Dez 2006 18:15

Re: Performance verbessern
 
hmm und wo soll ich mir das ergebnis anschauen wenn nicht im programm?
steh grad irgendwie auf dem schlauch

omata 10. Dez 2006 18:18

Re: Performance verbessern
 
Ich dachte du benutzt MySQL? Da gibt es doch ein Administrator-Tool und in diesem einen Query-Analyzer.

Oder du gehst einfach auf die Konsole und ruft mysql direkt auf. Dort kannst du doch einfach mal die Anweisung absetzen und das Ergebnis anschauen.

...oder du packst dir in deinem Programm einfach eine ZQuery, Datasource und DGGrid auf die Form, dann kannst du das auch mal eben anschauen.

Gruss
Thorsten

Luncustaf 10. Dez 2006 18:21

Re: Performance verbessern
 
hmm ich benutze mysqlfront - damit geht es auch bekomme aber eine fehlermeldung das etwas bei der syntax nicht stimmt und zwar hier

Delphi-Quellcode:
(SELECT kategorie AS name, COUNT(*) anzahl
           FROM rezepte
gruß

omata 10. Dez 2006 18:25

Re: Performance verbessern
 
Das hatte ich befürchtet, deshalb wollte ich mehr über deine Datenbankstruktur wissen.

Welche Tabellen, Welche Spalten in Tabellen, Welche Verknüpfungen zwischen den Tabellen...

Gruss
Thorsten

mkinzler 10. Dez 2006 18:28

Re: Performance verbessern
 
Sollte sicher
SQL-Code:
count(*) as anzahl
heißen.
Aber ich hoffe das kategorie ein Fremdschlüssel ist

Luncustaf 10. Dez 2006 18:30

Re: Performance verbessern
 
Delphi-Quellcode:
kategorie
   name //namen der kategorien

unterkat
   kat  //hauptkategorie -> aus tabelle kategorie
   unter //name der unterkategorie

rezepte
   name   //name des rezepts
   unterkat //dazu gehörige unterkategorie -> aus tabelle unterkat
   kategorie //hauptkategorie -> aus tabelle kategorie

zutaten
   kategorie //hauptkategorie -> aus tabelle kategorie
   unterkat //dazu gehörige unterkategorie -> aus tabelle unterkat
   name     //name des rezepts
   zutat    //name der zutat
   menge    //menge der zutat
   mass     //maß der zutat
   zubereitung //zubereitung als BLOB
hmm das sind die 4 tabellen mit den einzelnen spalten - beziehungen bestehen so eigentlich keine - ich speicher halt jedesmal den namen der kategorie und unterkategorie mit und frage danach ab.
aber fremdschlüssel usw hab ich nicht eingebaut da ich nicht mehr 100% wusste wie das ging.
also im endeffekt steht jede tabelle für sich.
die einzelnen felder sind alles charakter felder.

mkinzler 10. Dez 2006 18:31

Re: Performance verbessern
 
Geb noch die Typen an und was PK und FK ist.

Luncustaf 10. Dez 2006 18:32

Re: Performance verbessern
 
was meinst du mit PK und FK und den Typen?

omata 10. Dez 2006 18:34

Re: Performance verbessern
 
Du solltest dir angewöhnen mit IDs zuarbeiten.

Ich schau mir das jetzt nochmal genauer an...

omata 10. Dez 2006 18:55

Re: Performance verbessern
 
So, hier mal ein neuer Versuch...

SQL-Code:
SELECT k.name AS kategorie, NULL AS unter, NULL AS rezept, ka.anzahl, '1' typ
FROM kategorie k
LEFT JOIN (SELECT kategorie, COUNT(DISTINCT name) anzahl
           FROM rezepte
           GROUP BY kategorie, unterkat) ka
  ON k.name = ka.kategorie

UNION

SELECT k.name AS kategorie, uk.unter, NULL AS rezept, ka.anzahl, '2' typ
FROM kategorie k
INNER JOIN unterkat uk
  ON k.name = uk.kat
LEFT JOIN (SELECT kategorie, unterkat, COUNT(*) anzahl
           FROM rezepte
           GROUP BY kategorie, unterkat) ka
  ON    k.name = ka.kategorie
     AND uk.unter = ka.unterkat

UNION

SELECT kategorie, unterkat, r.name, NULL AS anzahl, '3' typ
FROM rezepte r

ORDER BY kategorie, unter, rezept, typ
Gruss
Thorsten

Luncustaf 10. Dez 2006 19:02

Re: Performance verbessern
 
hi,

danke für deine mühen, wieder ein fehler an der gleichen stelle

SQL-Code:
(SELECT kategorie, COUNT(DISTINCT name) anzahl
           FROM rezepte

mkinzler 10. Dez 2006 19:04

Re: Performance verbessern
 
SQL-Code:
as anzahl
Ich würde aber einen künstlichen Schlüssel ID o.ä. anlegen und diesen als FK verwenden.


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:15 Uhr.
Seite 1 von 3  1 23      

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