Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   C# SP mit vielen Parametern effizient gestalten (https://www.delphipraxis.net/139297-sp-mit-vielen-parametern-effizient-gestalten.html)

xaromz 26. Aug 2009 11:39

Datenbank: MySQL • Version: 5.1 • Zugriff über: egal

SP mit vielen Parametern effizient gestalten
 
Hallo,

ich bin gerade dabei, für ein Projekt eine Suchfunktion zu bauen. Meine Suche liefert mir eine Liste mit IDs meiner Datenbankeinträge. Wie kann ich jetzt die Datenbankabfrage möglichst gut gestalten, dass ich diese Liste übergebe und eine Tabelle mit den zugehörigen Einträgen bekomme?

Es muss ja wohl was besseres geben als
SQL-Code:
SELECT * FROM tabelle WHERE id = 1 OR id = 2 OR id = 4 OR ...
Und wie kann ich die Liste meiner IDs an eine SP übergeben? Ich kann doch nicht ein paar hundert Parameter übergeben (die genaue Anzahl ist ja immer unterschiedlich).

Gruß
xaromz

mkinzler 26. Aug 2009 11:43

Re: SP mit vielen Parametern effizient gestalten
 
Du könntest die Abfrage manuell zusammensetzen

xaromz 26. Aug 2009 11:46

Re: SP mit vielen Parametern effizient gestalten
 
Hallo,

klar, das kann ich machen. Ich denka aber, dass so eine Abfrage von der Datenbank sehr ineffizient umgesetzt wird. Mir wäre etwas wie "WHERE id IN Liste" lieber,wie es ja mit SELECT-Queries funktioniert.
Außerdem ist meine gesamte Datenbanklogik in SPs gehalten, ich habe keinen SQL-Code in meinem Programm. Das würde ich gerne beibehalten.

Gruß
xaromz

hoika 26. Aug 2009 11:50

Re: SP mit vielen Parametern effizient gestalten
 
Hallo,

eine temporäre Tabelle ?


Heiko

xaromz 26. Aug 2009 11:54

Re: SP mit vielen Parametern effizient gestalten
 
Hallo,

klar, kann ich machen. Aber dann muss ich tratzdem ert mal ein paar hundert Zeilen anlegen, und dazu muss ich die Liste erst mal der Datenbank übergeben. Das ist ja aber Teil meines Problems.

Gruß
xaromz

hoika 26. Aug 2009 13:26

Re: SP mit vielen Parametern effizient gestalten
 
Hallo,

Zitat:

Meine Suche liefert mir eine Liste mit IDs meiner Datenbankeinträge.
Da es sich ja um eine DB-Suche handelt,
könnte man die Ergebnis ja gleicht in die TempTable packen, etwa so

SQL-Code:
Insert Into TempTable (Select Id from Tab1e1 Where Name='Müller')
Das Select Id from Tab1e1 Where Name='Müller' wäre jetzt die Suche

Die genaue Syntax bei mysql musst du mal raussuchen.


Heiko

xaromz 26. Aug 2009 14:15

Re: SP mit vielen Parametern effizient gestalten
 
Zitat:

Zitat von hoika
Da es sich ja um eine DB-Suche handelt,
könnte man die Ergebnis ja gleicht in die TempTable packen

wo hab ich geschrieben, dass es eine DB-Suche ist? Wäre das so, dann hätte ich kein Problem. Meine Suchmaschine legt ihren Index aber in einer eigenen Datei ab. Daher ja auch meine Probleme.

Gruß
xaromz

hoika 26. Aug 2009 14:48

Re: SP mit vielen Parametern effizient gestalten
 
Hallo,

also unter Firebird kann man die Query in der SP
dynamisch zusammenbauen.
Folgendes geht dann ja.

select * from table1
where id in (3,5)

Ausserdem müsste mysql doch String-Funktionen haben ?
Übergebe einer SP alle Parameter mit Komma getrennt als Varchar
und trage die dann in die temp table ein.


Heiko

xaromz 26. Aug 2009 15:38

Re: SP mit vielen Parametern effizient gestalten
 
Hallo,

Zitat:

Zitat von hoika
Folgendes geht dann ja.

select * from table1
where id in (3,5)

Ausserdem müsste mysql doch String-Funktionen haben ?
Übergebe einer SP alle Parameter mit Komma getrennt als Varchar

das hilft mir weiter. Danke :thumb:

Gruß
xaromz

xaromz 3. Sep 2009 10:32

Re: SP mit vielen Parametern effizient gestalten
 
Hallo,

jetzt hab ich doch noch eine Frage:
Ich habe das jetzt mit einer temporären Tabelle gelöst, klappt auch wunderbar. Nur steht in der Dokumentation von MySql, dass ein "CREATE TABLE" eine Transaktion beendet. Wenn ich also konkurrierende Aufrufe habe, dann greifen die doch auf die selbe temporäre Tabelle zu, oder? Wenn ich also ein "DROP TABLE IF NOT EXISTS" ausführe, ziehe ich einem anderen Thread die Tabelle unterm Hintern weg. Oder bin ich hier auf den Holzweg?

Gruß
xaromz


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:46 Uhr.
Seite 1 von 2  1 2      

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