sql >> Database >  >> RDS >> Mysql

Door MySQL opgestelde instructies met een variabelenlijst met variabele grootte

Ik kan een paar oplossingen bedenken.

Een oplossing zou kunnen zijn om een ​​tijdelijke tabel te maken. Voeg een invoeging toe aan de tabel voor elke parameter die u in de in-clausule zou hebben. Doe dan een simpele join tegen je tijdelijke tafel.

Een andere methode zou kunnen zijn om zoiets te doen.

$dbh=new PDO($dbConnect, $dbUser, $dbPass);
$parms=array(12, 45, 65, 33);
$parmcount=count($parms);   // = 4
$inclause=implode(',',array_fill(0,$parmcount,'?')); // = ?,?,?,?
$sql='SELECT age, name FROM people WHERE id IN (%s)';
$preparesql=sprintf($sql,$inclause);  // = example statement used in the question
$st=$dbh->prepare($preparesql);
$st->execute($parms);

Ik vermoed, maar heb geen bewijs, dat de eerste oplossing misschien beter is voor grotere lijsten, en de laatste zou werken voor kleinere lijsten.

Om @orrd blij te maken is hier een beknopte versie.

$dbh=new PDO($dbConnect, $dbUser, $dbPass);
$parms=array(12, 45, 65, 33);
$st=$dbh->prepare(sprintf('SELECT age, name FROM people WHERE id IN (%s)',
                          implode(',',array_fill(0,count($parms),'?'))));
$st->execute($parms);


  1. Hoe COUNT() werkt in SQL Server

  2. 5 Tekenen dat je Excel bent ontgroeid

  3. Application_name instellen op Postgres/SQLAlchemy

  4. Wijzig het type varchar-veld in integer:kan niet automatisch worden gecast om integer te typen