webForumDet fria alternativet

WHERE IN (WHERE IN)

5 svar · 479 visningar · startad av phred

phredMedlem sedan nov. 2005314 inlägg
#1

Hej har en sql som ser ut som följer:

SELECT aaa, bbb, ccc from tbl_xxx WHERE aaa IN (SELECT aaa FROM tbl_yyy WHERE rrr IN (?))

oCmd.Parameters.AddWithValue("?", qqq);

där qqq är en semikolonseparerad sträng ex. Värde1, Värde2, Värde3

Det fungerar fint om det vara är ett värde i qqq, blir det fler så ballar det ur.

Gör jag helt fel ?

MySQL är dataasen.

hör av er.
Tjabba

Peter SMedlem sedan dec. 20025 483 inlägg
#2

IN() vill ha kommaseparerade värden, så testa med att byta alla semikolon mot kommatecken.

phredMedlem sedan nov. 2005314 inlägg
#3

oj oj, klantigt värre. det jag menar är såklart kommaseparerad.

Mer info för att komma med någon bra idé.

tbl_sites
siteID INT, AUTOINC, PRIMARY
siteURL varchar

tbl_cat
catID INT, AUTOINC, PRIMARY
siteID INT
siteCat varchar
*************************
SELECT siteID, siteURL from tbl_sites WHERE siteID IN (SELECT siteID FROM tbl_cat WHERE siteCat IN (?)) LIMIT 1

Jag vill alltså hämta en post från tbl_sites där siteID finns i tabellen tbl_cat med någon av de valda kategorierna. I tbl_cat kan alltså ett siteID finnas med flera gånger med olika siteCat.
de valda kategorierna är olika checkboxar som sätts ihop i en ArrayList som sedan konverteras till en kommaseparerad sträng.

LarsGMedlem sedan dec. 200012 464 inlägg
#4

Det går inte att använda en parameter i detta fall. Du får expandera ut din lista eller använda en parameter per värde.

phredMedlem sedan nov. 2005314 inlägg
#5

Du tappade mig vid hej ;)

Tack för svar, men det där sa mig ingenting faktiskt. Det jag tror att jag förstod är att jag inte kan göra som jag tänkt, rätt ?

LarsGMedlem sedan dec. 200012 464 inlägg
#6

Jo.

Det jag menar med att expandera listan är att stoppa in värdena direkt i sql-satsen

q = "SELECT aaa, bbb, ccc from tbl_xxx WHERE aaa IN (SELECT aaa FROM tbl_yyy WHERE rrr IN (" & qqq & ")";

Du måste då hantera eventuella apostrofer kring varje värde om kolumnen rrr kräver det. Du måste också skydda mot sql-injections.

Alternativt kan du göra

q = "... where rrr in (?,?,?,?);

Antalet frågetecken motsvarar antalet värden i din lista och där du sedan hanterar varje värde som en parameter.

122 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
119 ms — hämta tråd, inlägg och bilagor (db)