Schrift
[thread]3370[/thread]

SQL-Abfrage, die auf mehrere Werte passt?: Werte sind im Array gegeben



<< >> 6 Einträge, 1 Seite
macMeck
 2003-11-04 18:04
#35652 #35652
User since
2003-08-04
162 Artikel
BenutzerIn
[default_avatar]
Hi,

kann man mit SQL (speziell MySQL) ne Abfrage so gestalten, dass sie nicht auf einen speziellen Wert passt, sondern auf mehrere Werte, die beispielsweise in einem Array drin stehen?

Mal ein Beispiel, was ich meine. Eine einfache Abfrage wäre:[sql]SELECT* FROM TABELLE WHERE ID = 1;[/sql] Angenommen ich habe jetzt ein Array mit den IDs, die ich haben will (1, 3, 4, 8, 9, 10). Ich kann natürlich jetzt ein Select machen und alle Werte mit OR verbinden. Die Frage ist aber, obs dazu einen kürzeren Weg gibt. Irgendwas wie [sql]SELECT * FROM TABELLE WHERE ID = @array;[/sql]

Danke schon mal für eure Ideen...

macMeck
It all works, as long as it's documented!
Crian
 2003-11-04 18:34
#35653 #35653
User since
2003-08-04
5872 Artikel
ModeratorIn
[Homepage]
user image
Klar geht das: where ID = 1 or ID = 2 or ID = 3 ...

Du kannst die Anweisung ja mit Perl in einen Skalar schreiben und diesen dann übergeben.

Außerdem geht noch: select ... where ID in ( 1, 2, 3);

Aber ob Du jetzt schreibst

Code: (dl )
$sql = "select * from tabelle where ID = " . (join " or ID =", @array) . ";";


oder

Code: (dl )
$sql = "select * from tabelle where ID in ( " . (join ", ", @array) . ");";


bleibt sich fast gleich ^^\n\n

<!--EDIT|Crian|1067963765-->
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
Strat
 2003-11-05 00:52
#35654 #35654
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
@Crian: aus gruenden der frechheit koennte man sich auch ueberlegen, es folgendermaszen zu schreiben:
Code: (dl )
1
2
3
4
{ # block
 local $" = " or ID=";
 $sql = "select * from tabelle where ID=@array";
} # block

oder:
Code: (dl )
1
2
3
4
{ # block
 local $" = ", ";
 $sql = "select * from tabelle where ID in (@array)";
} # block

ich schwanke da zwischen gut und boese...\n\n

<!--EDIT|Strat|1067986375-->
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
Crian
 2003-11-13 13:04
#35655 #35655
User since
2003-08-04
5872 Artikel
ModeratorIn
[Homepage]
user image
Ja, daran hatte ich auch schon gedacht, aber da man dann mehrere Zeilen braucht und ich macMeck so verstanden hatte, dass er es gern in einer Zeile lösen wollte wieder verworfen.

Ich schwanke dabei allerdings auch zwischen gut und böse :)
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
macMeck
 2003-11-13 13:12
#35656 #35656
User since
2003-08-04
162 Artikel
BenutzerIn
[default_avatar]
Also gut, nach dem der Thread jetzt noch mal hochkam: irgendwie haut das mit dem where ID in () nicht hin. Ich kann die Abfrage genau so wie sie im Statement steht im mysql-Client laufen lassen. Kein Problem. Aber über DBI funktioniert das irgendwie nicht...
Egal, ich hab jetzt die andere Variante genommen und die tut's in jedem Fall...

Danke schön.

macMeck
It all works, as long as it's documented!
Crian
 2003-11-13 13:18
#35657 #35657
User since
2003-08-04
5872 Artikel
ModeratorIn
[Homepage]
user image
[quote=macMeck,13.11.2003, 12:12]irgendwie haut das mit dem where ID in () nicht hin. Ich kann die Abfrage genau so wie sie im Statement steht im mysql-Client laufen lassen. Kein Problem. Aber über DBI funktioniert das irgendwie nicht...[/quote]
Komisch ... wie kann denn sowas sein?

[quote=macMeck,13.11.2003, 12:12]Egal, ich hab jetzt die andere Variante genommen und die tut's in jedem Fall...

Danke schön.

macMeck[/quote]
Bitte - schön, dass es so wenigstens geht.
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
<< >> 6 Einträge, 1 Seite



View all threads created 2003-11-04 18:04.