Interroger une table grace a des liste déroulante

Signaler
Messages postés
3
Date d'inscription
mercredi 22 décembre 2004
Statut
Membre
Dernière intervention
5 janvier 2005
-
Messages postés
3
Date d'inscription
mercredi 22 décembre 2004
Statut
Membre
Dernière intervention
5 janvier 2005
-
Bonjour,

je suis confrontée à un petit probleme qui ne doit pas etre compliqué a résoudre mais, je n'y arrive pas et cela fait quelques semaine que cela traine.

Je tente d'interroger une base de données, par l'intermédiaire, de MySQL. Cette base se compose de 4 champs principaux, appeles:
Espèces, Auteur, Lieu, Année.

Pour chaque champs j'ai crée une liste déroulante comportant les differentes entrées.
Par exemple

espece: Toutes, Chien, Chat, Lapin, Mouton....
Auteur: Tous, Dupont, Durant, ....
Lieu: Tous, France, Italie, Maroc....
Année: Toutes, 1990, 1999, 2001, 2002....

Le but etant d'interroger la table grace à ces listes.

J'arrive donc a obtenir un resultats si je demande une requete de type:

chercher: Toutes les espèces" de "tous les auteurs" de tout les lieux" de "toutes les années".
Cela me reponds donc, comme je le demande toutes les entrées de la table.

J'arrive aussi à avoir une réponse si je fait une recherche en utilisant un membre de la liste pour chaque champ:
ex chercher "chien" de "Dupont" de "France" de "1990"

Mon probleme ce situe sur les requete a mis chemin, que je n'arrive pas a faire.

J'aimerai par exemple pouvoir demander:

Chercher "chien" de "Tous" de "Maroc" de "Toutes"

Ainsi la répose doit me donner tout les chien trouver au maroc pour toutes les annees et tout les auteurs

A la sortie j'aimerai bien sur avoir une reponse me donnant:
1- chien, l'auteur, Maroc, annees
2- chien, l'auteur, Maroc, annees
etc
Comment faire?
merci de vos réponse et de votre gentillesse.
Funeste.

6 réponses

Messages postés
10840
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
23
Salut,
que je sois sur d'avoir compris, tu as 1 table, avec 4 champs (espece, auteur, lieu, annee), et la 1ere ligne de ta table est composee de : espece=chien, auteur=dupont, lieu=france, annee=1990?

Dans ce cas tu n'auras pas de chien lie avec dupont, et Maroc?
Il te faut 4 tables, et lier les tables entre elles en fonction de...ben des relations qu'il y a entre tes tables. (un auteur a un animal, ou pas, si oui, de quelle espece, ou vit-il, etc...)
Messages postés
10840
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
23
Pardon, je dis des conneries...suis fatigue la.
Dans ta table, tu as a chaque ligne, une espece, un auteur, un lieu, et une annee? On peut avoir par exemple : chien, 1990, dupont, France et une autre ligne : chien, 2002, durand, Maroc
C'est ca?

Dans ce cas :

SELECT * FROM matable WHERE espece='chien' AND lieu='Maroc'

Voila la requete pour ton exemple.
Messages postés
10840
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
23
Dans tous les cas (oui, C encore moi), il faut que tu fasses des tests, pour le choix "tous".
Genre :

Si $espece=="Toutes"
alors $espece=""
sinon $espece=$espece

puis un test pour voir si une de tes variables est remplie:
si $espece || $auteur...etc
alors $condition="WHERE "

ensuite tester s'il y a plusieurs choix, et si oui $operateur=" AND " sinon $operateur=""

sinon $condition=""

par exemple, et en gros hein.

apres ta requete donneras un truc du genre
SELECT * FROM matable $condition $espece $operateur $auteur $operateur ...etc

Ca devrait a peu pres marcher. Mais C a la louche, y a surement des trucs a modifier. Y a l'idee disons.
Messages postés
3
Date d'inscription
mercredi 22 décembre 2004
Statut
Membre
Dernière intervention
5 janvier 2005

Bonjour,

merci pour tes reponses malalam.

je n'ai pas encore eu le temps de tester tes conseil mais je poste quand meme pour t'eclairer un peu sur ce que j'essaye de faire.

j'ai donc une table avec 4 champs

Especes, auteur, lieu, années

elle est remplie de cette facon:

Chien dupont france 1990
Chat durand maroc 2002
serpent martin belgique 2001
mouton rolland espagne 2000
chien durand france 1999
chat dupont maroc 2003

si je selectionne dans mes liste 'chien'+'dupont'+'france'+'1990'
j'arrive a obtenir le bon résultat.
Si je fait une requete du types 'select * from table' j'obtient toute les entrée de la table.
Mon probleme se situe entre les deux

Je n'arrive pas a contruire une requete pouvant me donner le résultat d'une sélection du type

selection 'chien'+'tout'+'france' +'tout'
ou la reponse devrait etre:

chien dupont france 1990
chien durand france 1999

donc mes deux questions sont,

comment faire pour que lorsque je selectionne les 'Tout' de mes listes deroulantes, la totalité des entrée de ce champs soit effectivement selectionné?

Comment construire la requete dont je t'ai parlé au dessus.

C'est une recherche croisée sur les champs d'une table qui contient un bon millier de ligne, donc je dois créer une requete assez générale.

Merci pour ton aide je vais de ce pas tester ce dont tu m'as parler.
Funeste.
Messages postés
10840
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
23
Re,

ben de rien.
Ben oui, c'est ce que je t'explique; a mon avis, tu peux te debrouiller pour ne creer qu'une seule requete pour toutes tes interrogations de la table, en utilisant des variables : variable pour la condition (vide, ou WHERE), pour les operateurs, pour les champs de recherche.
Si tu te debrouilles bien, tu dois pouvoir obtenir chaque fois une requete valide.
Disons que si le choix pour la recherche est :
chien
et les autres champs a Tous :

$condition="WHERE" (il y a au moins 1 critere de recherche)
$operateur[champ] s'il y a plusieurs criteres de recherche et en fonction des champs choisis...tu en auras 3 : $operateur[auteur], $operateur[lieu] et $operateur[annee]="" ou ="AND"
$espece="chien" (c'est le critere de recherche)
$auteur, $lieu, $annee ="" (ils sont fixes a Tous)

$selection_requete=" ".$espece." ".$operateur[auteur]." ".$auteur." ".$operateur[lieu]." ." ".$lieu." ".$operateur[annee]." ." ".$annee." "

mais il faut optimiser ces variables parceque la c'est un peu le bordel et je suis sur qu'en reflechissant un peu on arrive a un truc bcp moins complique, avec moins de variables.

ta requete : SELECT * FROM table $condition $selection_requete

Elle devrait etre valable dans tous les cas de figure.
Messages postés
3
Date d'inscription
mercredi 22 décembre 2004
Statut
Membre
Dernière intervention
5 janvier 2005

bonjour,



je suis toujours dans cette histoire de requetes



J'essaye de faire comme tu m'as dit Malalam, mais je suis confronté a un petit probleme,

je n'obtient pas de reponse à la requete.



Pour le moment je me suis concentrer sur un seul champ de ma table

voici mon code.



$var1 = $_POST ['espece'];

echo " votre recherche s'effectue sur les paramètres suivant: '$var1'

";



//Condition de la requete.



if ($var1 == "toutes") {

$espece="";

$condition="";

}

else {

$espece=$var1;

$condition="WHERE espèce = ";

echo "$condition $espece

";

}



// Etablissement de la connexion

$connexion = mysql_connect("localhost","root","") or die ("La connexion ne s'est pas effectuée !");



mysql_select_db("biodiversite") or die ("Connexion à la base impossible !");



$resultat= mysql_query ( "SELECT * FROM inventaire $condition ".$espece." ");



// Réponse à la requète



if ($resultat == False)

{

echo "Aucun résultat ne correspond à vos critères de recherche.\n";

}



else

{

while ($ligne = mysql_fetch_array($resultat)) {



$esp= $ligne['espece'];


echo " Voici le resultat de votre
recherche: espèce = $esp \n

";

}

}

?>

lorsque je selectionne Tout pour le champs espèce, j'obtient une réponse, la pas de probleme.

Mais lorsque je specifie l'espece, pas de réponse ni de message d'erreur, c'est comme si il ne fais ait pas la requete.

Pourtant la connexion sur la base se fait bien puisque cela marche pour la premiere requete.

Je rame j'y cmprends rien

HELP



Funeste.