Cela semble une tâche si simple, mais j'ai du mal à trouver une solution qui me plaise. Je ne trouve rien que je considérerais autre chose que maladroit. Voici ce que je travaille avec:Construire une requête MySQL basée sur des variables affichées
Il existe un formulaire de recherche qui enregistre des variables dans le script de traitement. Ces variables sont les filtres pour les données interrogées. Selon les droits de l'utilisateur, il peut y avoir plus ou moins de variables entrant, en fonction des filtres auxquels il a accès. Chaque filtre fait référence à un champ dans la table dont les résultats proviennent, fondamentalement. Une option pour chaque filtre est également "ANY", donc aucune clause WHERE n'est nécessaire.
Quelle est une bonne façon de construire la chaîne de requête. Disons qu'il y a quatre variables qui reviennent: $ firstname, $ lastname, $ age, $ dob. Mais seuls certains utilisateurs ont accès au filtre par $ age et $ dob.
$query = "SELECT * FROM people";
if(($firstname != 'ANY' && !empty($firstname)) ||
($lastname != 'ANY' && !empty($lastname)) ||
($age != 'ANY' && !empty($age)) ||
($dob != 'ANY' && !empty($dob))) {
$query .= " WHERE";
}
if($firstname != 'ANY' && !empty($firstname)) {
$query .= " firstname='$firstname'";
}
if($lastname != 'ANY' && !empty($lastname)) {
if($firstname != 'ANY' || !empty($firstname)) {
$query .= " AND";
}
$query .= " lastname='$lastname'";
}
...
Et ainsi de suite. Mais ça a l'air idiot, horrible et ridiculement inefficace pour moi. J'utilise un pattern MVC légèrement modifié, alors est-ce qu'il serait logique de construire des méthodes dans le modèle de recherche pour chaque filtre possible?
En note, ce qui est peut-être fait, mais écourtez l'espace, spécifiez vos champs au lieu d'utiliser *. –