Lister éléments d'une BDD

Fermé
a70m Messages postés 2763 Date d'inscription jeudi 21 mai 2009 Statut Contributeur Dernière intervention 2 février 2014 - 12 avril 2011 à 22:46
a70m Messages postés 2763 Date d'inscription jeudi 21 mai 2009 Statut Contributeur Dernière intervention 2 février 2014 - 15 avril 2011 à 09:09
Bonjour,

J'ai dans une base de données, 400 entrées contenants chacune plusieurs paramètres. (Couleur, année, etc ...)

J'aimerai développer une fonction de recherche par critères, et pour celà, il me faut lister les éléments unique de la base. je ne sais si c'est très clair, je donne donc un exemple :

*****************
* Couleur * Année *
*****************
* Rouge * 2010 *
* Bleu * 2009 *
* Jaune * 2009 *
* Vert * 2008 *
* Rouge * 2009 *
* Bleu * 2007 *
* Bleu * 2009 *
* Bleu * 2010 *
* Jaune * 2009 *
* Jaune * 2008 *
* Rouge * 2007 *
* Bleu * 2010 *
* Vert * 2009 *
*****************

J'aimerai par exemple avoir un menu déroulant avec Rouge-Vert-Jaune-Bleu et un autre avec 2007-2008-2009-2010 comme options

Mais je n'aimerai pas le rentrer manuellement de manière à ce que si j'entre une nouvelle année ou une nouvelle couleur dans ma BDD, elle soit automatiquement ajoutée à mon menu.

J'ai essayé avec cette requête mais ça ne fonctionne pas :/
mysql_query("SELECT * FROM table WHERE couleur IN (SELECT couleur FROM table GROUP BY couleur HAVING COUNT(*) > 1) ORDER BY couleur")


Merci d'avance
a70m

23 réponses

black300 Messages postés 24 Date d'inscription lundi 27 décembre 2010 Statut Membre Dernière intervention 14 avril 2011
12 avril 2011 à 23:25
désolé mais votre probleme n'est pas claire, est ce que vout voulez faire deux menus déroulants (combobox) l'un contenant la couleur et l'autre l'année?
0
a70m Messages postés 2763 Date d'inscription jeudi 21 mai 2009 Statut Contributeur Dernière intervention 2 février 2014 217
Modifié par a70m le 13/04/2011 à 17:52
Oui oui

Supposons que la 2ème colonne de mon tableau n'existe pas. Donc on ne considère que la 1ere des couleurs

Donc dans ma table j'ai plusieurs fois du VERT, plusieurs fois du BLEU, du JAUNE et du ROUGE
Je n'arrive pas à faire la requête qui me permet de lister les couleurs qui existe dans ma table ...

J'espère que j'ai plus éclaircir mon problème.

Merci de t'y intéresser
0
a70m Messages postés 2763 Date d'inscription jeudi 21 mai 2009 Statut Contributeur Dernière intervention 2 février 2014 217
14 avril 2011 à 17:07
up?
0
Bonjour

très bêtement ...
SELECT couleur FROM matable GROUP BY couleur ORDER BY couleur

et la même chose pour les années, bien sûr
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
dsl une autre fois, si j'ai bien compris on suppose que t'as une table :
col1-col2-col3
tu et tu veux afficher ta table selon la colonne 2 ( par exple celle des couleurs) c ca??
0
a70m Messages postés 2763 Date d'inscription jeudi 21 mai 2009 Statut Contributeur Dernière intervention 2 février 2014 217
14 avril 2011 à 17:46
Non

Ca doit être moi qui m'exprime mal.
J'ai dans ma table un champ 'couleur' où chaque couleur apparait plusieurs fois. Dans le sens où j'ai plusieurs entrées qui sont rouges, plusieurs qui sont bleus, etc. ...

Et moi, j'aimerai en fait lister les différentes couleurs qui sont présentes dans ma table, sans afficher le reste, ni combien de rouges ou de bleues sont entrées dans ma table.

Merci à toi
0
je pense c'est comme l'a dit "le pere" si tu vx seulement afficher la colonne des couleurs dans un ordre alors tu fé la requete qui vient de tle donner : select couleur from table order by couleur group by couleur
0
a70m Messages postés 2763 Date d'inscription jeudi 21 mai 2009 Statut Contributeur Dernière intervention 2 février 2014 217
14 avril 2011 à 17:54
Je n'avais pas vu la réponse de le père.

C'est exactement ça ! Je ne connaissais pas la "fonction" GROUP BY

Merci à toi le père et aussi à black3000 pour tous les cheveux que tu t'es arraché en essayant de comprendre mon problème :o) !

Cordialement
a70m
0
mdr pas de quoi :) alors svp marquez votre question comme résolue
0
a70m Messages postés 2763 Date d'inscription jeudi 21 mai 2009 Statut Contributeur Dernière intervention 2 février 2014 217
14 avril 2011 à 17:57
C'est fait ! :)
0
a70m Messages postés 2763 Date d'inscription jeudi 21 mai 2009 Statut Contributeur Dernière intervention 2 février 2014 217
14 avril 2011 à 20:53
Je reviens encore vers vous pour une question simple :

J'ai donc fait mon mini-moteur de recherche en utilisant la requête de le père pour année et couleur, et j'aimerai maintenant afficher les entrées de ma base qui satisferont mes conditions ...

Exemple : Si je veux toutes entrées de 2008 de couleur rouge.
Seulement, je ne veux pas être obligé de remplir les 2 champs. SI je veux toutes les entrés de 2007 par exemples.

J'ai donc fait ma requête de la manière suivante :
$reponse = mysql_query("SELECT * FROM vins WHERE anneeLIKE %$annee% OR couleur LIKE %$couleur% ORDER BY id") or die(mysql_error());


Mais si un champ n'est pas rempli, SQL ne comprend pas un LIKE %% avec rien entre les %

Je n'arrive pas à trouver la requête qui me permet de séléctionner les entrées d'un ou plus champs, sans avoir à forcément remplir les autres.

J'espère être assez clair.
Cordialement
0
black300 Messages postés 24 Date d'inscription lundi 27 décembre 2010 Statut Membre Dernière intervention 14 avril 2011
14 avril 2011 à 21:17
si j'ai bien compris, vous voulez afficher par exemple toutes les colonnes qui ont l'année 2008 et la couleur rouge, donc votre requete sera :
select*from vins where couleur = 'rouge' and annee ='2008'
0
a70m Messages postés 2763 Date d'inscription jeudi 21 mai 2009 Statut Contributeur Dernière intervention 2 février 2014 217
14 avril 2011 à 21:19
C'est ça, seulement, étant donné que le résultat (rouge et 2009) proviennent d'un formulaire, je voudrais faire en sorte que TOUS les champs NE soient PAS obligatoire.

C'est à dire que si je renseigne juste la couleur Rouge, j'aimerai qu'il me liste toutes les entrées de couleurs rouges. Idem pour l'année. Mais que si je remplis les 2, ça marche aussi.

Je crois que j'ai des problèmes pour m'exprimer :(
0
a70m Messages postés 2763 Date d'inscription jeudi 21 mai 2009 Statut Contributeur Dernière intervention 2 février 2014 217
14 avril 2011 à 21:32
Je vais essayer de détailler au mieux :)

Je souhaite faire un moteur de recherche pour 'filtrer' mes données.

J'ai donc mon formulaire de recherche qui est comme ceci :

Couleur : [Select avec la liste des couleurs présentes dans la table]
Année: [Select avec la liste des années présentes dans la table]

[Rechercher]


Une fois que je clique sur Rechercher, je veux afficher les entrées de ma table correspondant à mes critères de recherches.
Seulement je ne veux pas obliger à renseigner tous les champs pour rechercher une ou plusieurs entrées. Ce qui fait qu'à l'envoie de la recherche, des champs seront peut être vides. C'est donc la requête qui me pose problème.

J'espère que ça ira cette fois. Merci de te creuser la tête pour moi encore une fois.
0
a70m Messages postés 2763 Date d'inscription jeudi 21 mai 2009 Statut Contributeur Dernière intervention 2 février 2014 217
14 avril 2011 à 22:01
Merci, seulement j'aimerai le faire en PHP :/
0
Bonsoir

D'abord, je fabrique deux conditions, vides si le champ correspondant est vide, ou avec LIKE et %% s'il y a quelque chose
Ensuite, s'il y a deux conditions, je mets un AND (tu avais mis OR, ça me semble bizarre, à toi de voir) entre les deux ; sinon, je les concatène simplement, comme il y en a zéro ou une il ne faut pas de AND
Ensuite, s'il y avait au moins une condition, je mets le WHERE devant
Finalement, je rajoute le ORDER BY après

$condition1= (empty($annee)?"":"annee LIKE '%$annee%'";
$condition2= (empty($couleur)?"":"couleur LIKE '%$couleur%'";
$condition = (!empty($condition1) && (!empty($condition2)) ? ($condition1.' AND '.$condition2) : ($condition1.$condition2);
if (!empty($condition)) $condition= ' WHERE '.$condition
$requete = "SELECT * FROM vins'.$condition. ' ORDER BY id';
$reponse = mysql_query($requete) or die(mysql_error());
0
a70m Messages postés 2763 Date d'inscription jeudi 21 mai 2009 Statut Contributeur Dernière intervention 2 février 2014 217
14 avril 2011 à 23:24
Seulement dans mon exemple je l'ai fait avec le champs couleur et années, mais dans ma table, j'ai 7 autres champs qui entrent en jeu, je devrais donc faire $condition2, $condition3 .... $condition7 ?
0
si tu mets ta liste de variables et de noms de champs dans un tableau, c'est assez facile, par exemple avec 4 :
(les noms des champs et des variables pourraient être différents, mais il faut qu'il y en ait le même nombre !)

$meschamps=array('couleur','annee','poids','taille');
$mesvariables=array($couleur,$annee,$poids,$taille);

$condition='';
for ($k=0; $k< count($meschamps);$k++) {
  if (!empty($condition)) $condition .= ' AND ';
  $condition .= $meschamps[$k]." LIKE '%".$mesvariables[$k]."%'";
}
if (!empty($condition)) $condition= ' WHERE '.$condition;
...
0
a70m Messages postés 2763 Date d'inscription jeudi 21 mai 2009 Statut Contributeur Dernière intervention 2 février 2014 217
14 avril 2011 à 23:51
Je me penche dessus et je te tiens au courant.
0
moi dodo ;). À demain
0
a70m Messages postés 2763 Date d'inscription jeudi 21 mai 2009 Statut Contributeur Dernière intervention 2 février 2014 217
15 avril 2011 à 00:29
Tu viens de m'enlever une épine du pied le père !!
Merci beaucoup !!

après pas mal de modifications, et d'adaptions j'obtiens ce que je veux !

Je poste la source tout de même :

$meschamps=array('couleur', 'annee', 'note');
$mesvariables=array($Couleur, $Annee, $Note);


$condition='';
for ($k=0; $k< count($meschamps);$k++) {
  if ($condition != NULL AND $mesvariables[$k] != NULL) $condition .= ' AND ';
  if ($mesvariables[$k] != NULL) $condition .= $meschamps[$k]." LIKE '%".$mesvariables[$k]."%'" ;

}
if ($condition != NULL) $condition= ' WHERE '.$condition;

$reponse = mysql_query("SELECT * FROM table $condition") or die(mysql_error());


Encore merci pour ton aide précieuse!

Cordialement
a70m
0