Detta är samma sak som ställdes i den här frågan:Kan jag binda en array till ett IN()-villkor?
Svaret där var det, för en lista med variabel storlek i in
klausul måste du konstruera frågan själv.
Men du kan använda den citerade, kommaseparerade listan med find_in_set
, men för stora datamängder skulle detta ha betydande prestandapåverkan, eftersom varje värde i tabellen måste gjutas till en char-typ.
Till exempel:
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 ett tredje alternativ, du kan skapa en användardefinierad funktion som delar upp den kommaseparerade listan åt dig (jfr http://www.slickdev.com/2008/09/15/mysql-query-real-values-from-delimiter-separated-string-ids /
). Detta är förmodligen det bästa alternativet av de tre, särskilt om du har många frågor som förlitar sig på in(...)
klausuler.