Hello !
Pas certain d'avoir tout compris... en gros, ta seconde requête te retourne une liste de nom de communes que tu veux utiliser pour compléter un critère de ta requête principal ?
Solution simple mais pas élégante et pas optimisée :
if ($proxi_ville->rowCount() > 0) {
while($result = $proxi_ville->fetch(PDO::FETCH_ASSOC)){
$sql .= " OR ville = '" . $result['Nom_commune'] . "' "; // attention toutefois aux noms de communes qui auraient des apostrophes dans leurs noms
}
}
Solution simple un poil plus élégante mais toujours pas optimisée :
$communes = array();
if($proxi_ville->rowCount() > 0) {
while($result = $proxi_ville->fetch(PDO::FETCH_ASSOC)){
$communes[] = "'" . $result['Nom_commune'] . "'"; // toujours le même problème avec les apostrophes
}
}
if (!empty($commune))
$sql .= " OR ville IN ( " . implode(',', $communes) . " ) " ;
La meilleure solution consiste probablement à ne faire qu'une seule requête avec une sous requête (et donc ne pas exécuter la seconde requête en php, mais inclure celle-ci directement dans un IN de ta requête principale pour n'avoir qu'une requête à exécuter). Quelque chose du genre :
$sql = 'SELECT SQL_CALC_FOUND_ROWS * FROM bars WHERE ville = :ville';
$sql .= " OR ville IN ( SELECT DISTINCT Nom_commune FROM villes_de_france WHERE $formule<='$rayon' ) " ;
A adapter en fonction de ton besoin
