Dette er det samme som blev stillet i dette spørgsmål:Kan jeg binde et array til en IN()-betingelse?
Svaret der var det, for en liste i variabel størrelse i in
klausul, skal du selv konstruere forespørgslen.
Men du kan bruge den citerede, kommaseparerede liste ved hjælp af find_in_set
, men for store datasæt ville dette have betydelig indvirkning på ydeevnen, da hver værdi i tabellen skal castes til en char-type.
For eksempel:
select users.id
from users
join products
on products.user_id = users.id
where find_in_set(cast(products.id as char), :products)
Eller, som en tredje mulighed, du kan oprette en brugerdefineret funktion, der opdeler den kommaseparerede liste for dig (jf. http://www.slickdev.com/2008/09/15/mysql-query-real-values-from-delimiter-separated-string-ids /
). Dette er sandsynligvis den bedste mulighed af de tre, især hvis du har mange forespørgsler, der er afhængige af in(...)
klausuler.