sql >> Databasteknik >  >> RDS >> Mysql

PDO-bindningsvärden för MySQL IN-sats

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.



  1. Om klustrade index i postgres

  2. SQL Server Internals:Plan Caching Pt. II – Sammanställning av planer

  3. Varför kan jag inte utesluta beroende kolumner från `GROUP BY` när jag aggregerar med en nyckel?

  4. Verktyg för att generera databastabelldiagram med PostgreSQL?