CREATE TABLE my_table (
id INT AUTO_INCREMENT,
column1 INT,
column2 INT,
PRIMARY KEY (id)
);
INSERT INTO my_table(column1, column2) VALUES
(2, 1),
(1, 9),
(3, 3),
(5, 2),
(3, 8),
(1, 1),
(2, 2),
(4, 4),
(9, 2),
(4, 11),
(2, 5),
(1, 6);
<?php
// $mysqli is already declared as a working database connection by this sandbox
$array_conditions = [
'column1 IN (1, 2, 3, 4)',
'column2 IN (1, 2, 3)',
'column1 IN (4, 5, 6)',
];
$groups = [];
foreach ($array_conditions as $cond) {
if (sscanf($cond, '%s IN (%[^)])', $col, $values) === 2) {
$groups[$col] ??= [];
array_push($groups[$col], ...explode(', ', $values));
}
}
$conditions = [];
$parameters = [];
foreach ($groups as $column => $values) {
$values = array_unique($values);
$count = count($values);
$conditions[] = "$column IN (" . implode(',', array_fill(0, $count, '?')) . ')';
array_push($parameters, ...$values);
}
$sql = "SELECT * FROM my_table";
if ($conditions) {
$sql .= ' WHERE ' . implode(' AND ', $conditions);
}
//var_export($conditions);
//var_export($parameters);
var_export(
$mysqli->execute_query($sql, $parameters)->fetch_all(MYSQL_ASSOC)
);