Bonjour à vous,

Je me permet de laisser un post ici car j'ai une petite question bête concernant la recherche avec plusieurs critères sur une base de données.

J'ai plusieurs listes déroulantes et je voudrais tout simplement rechercher sur un ou plusieurs critères, voici ma requête:

$sql = "SELECT * FROM suivi WHERE lieu_vente = '$recherche_lieu' AND agent = '$agent_recherche' ORDER BY id Desc";

Je voudrais que les gens puissent chercher soit sur lieu_vente, sur agent, ou sur les deux

Avec le AND si un des deux critères est vide alors il n'y a pas de résultats, avec le OR les résultats ne sont pas assez affinés (ex: lieu_machin et agent_truc = tous les entrées ou il y a lieu_machin et agent_truc)

Quelle est la marche à suivre pour avoir si je choisi lieu_machin et agent_truc seulement les agent_truc a ce lieu_machin ?

Merci d'avance pour votre aide !!

( et bonne année ;) )

5 réponses


massadu33
Réponse acceptée

Bonjour,

Voici une solution parmit d'autre :

$sql = "SELECT * FROM suivi WHERE";
if(!empty($lieu)){
$sql .= "lieu_vente = '$lieu'";
if(!empty($agent)){
  $sql .= "AND";
}
}
 if(!empty($agent)){
 $sql .= "agent= '$agent'";
 }

 $sql .= "ORDER BY id Desc";

Après tu executes normalement ta requête

$liste = $pdo->prepare($sql);
$liste->execute();

je pense que ce code doit marcher

Salut,

Je ne suis pas sur d'avoir bien compris,
mais je pense que tu veux utiliser une "jointure" (mot-clé sql : JOIN)

Est-ce que tu peux nous donner la structure de tes tables ?

Sinon si tu veux essayer tout seul,
grafikart a fait un tuto sur les jointures :
https://www.grafikart.fr/tutoriels/mysql/jointures-mysql-105

[EDIT]
Essaies d'être plus clair,
j'ai beau relire, j'ai du mal à comprendre.

Je voudrais que les gens puissent chercher soit sur lieu_vente, sur agent, ou sur les deux

Ici on dirait que tu acceptes les 3 cas.

Quelle est la marche à suivre pour avoir si je choisi lieu_machin et agent_truc seulement les agent_truc a ce lieu_machin ?

Et là on dirait que tu n'acceptes plus qu'un cas,
qui semble être le "AND",
mais vu cette phrase ci-dessous, on dirait que tu n'en veut pas :

Avec le AND si un des deux critères est vide alors il n'y a pas de résultats

Je suis tout embrouillé :S

Jenjak
Auteur

Hello, merci beaucoup pour ta réponse !

Oui je voudrais accepter les 3 cas:

Soit le premier critère (pour avoir toutes les entrées sur un lieu) :

Soit le deuxième critère (pour avoir toutes les entrées sur un agent):

Soit les deux critères (pour avoir toutes les entrées d'un agent sur un lieu):

Pour le dernier cas de figure ça fonctionne vu que j'utilise un AND dans ma requête et que les deux critères sont choisis, mais dans les deux premiers cas vu qu'il y en a un des deux qui est vide il n'y rien en résultat vu que ma requete est SELECT * FROM suivi WHERE lieu_vente = 'lieu1' AND agent = '' ORDER BY id Desc

Je voudrais donc savoir la marche à suivre pour rechercher seulement sur un critère :)

Voici la table dans lequelle je fais ma recherche:

Je ne sais pas encore une fois si j'ai bien été clair :D

Jenjak
Auteur

Salut Massada, superbe, j'avais aussi pensé à faire des conditions mais je n'étais pas parvenu à concatener ça directement dans ma requete, je fais quelques tests et je vous tiens au courant

Jenjak
Auteur

Tout fonctionne très bien, merci infiniment à vous deux pour votre aide !