Création d'un select avec le données d'une DB Mysql

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Création d'un select avec le données d'une DB Mysql

par Invité » 30 nov. 2006, 11:33

J'ai trouvé il suffit de mettre la clause WHERE avant le GROUP BY

SELECT p.NomProduit,o.Option
FROM produits AS p left join OptionProduit AS o On p.Id=o.Id WHERE Etat = 1
GROUP BY p.NomProduit, o.Option


Merci @ vous tous

par bercy » 28 nov. 2006, 22:14

Ce forum est vraiment une bible.

Je vous remercie pour votre aide

Voici ce qui fonctionne pour moi

Code : Tout sélectionner

SELECT p.NomProduit,o.Option FROM produits AS p left join OptionProduit AS o On p.Id=o.Id GROUP BY p.NomProduit, o.Option
puis avec l'option optgroup de HTML, je fais ma sauce.

Une dernière question concernant ce sujet, si je souhaite EN PLUS faire un filtre WHERE sur p.NomProduit quel serai la syntaxe

Code : Tout sélectionner

SELECT p.NomProduit,o.Option FROM produits WHERE Etat = 1 AS p left join OptionProduit AS o On p.Id=o.Id GROUP BY p.NomProduit, o.Option
Merci encore.

par sadeq » 28 nov. 2006, 14:58

Code : Tout sélectionner

SELECT p.NomProduit,o.Option FROM produits AS p, OptionProduit AS o WHERE p.Id=o.Id GROUP BY o.Option
Me semble que ça peut être correct...en tout cas, ca affichera noproduit seulement si il a au minimum une option :roll:
Effectivement, mais le group by est manquant : il faut grouper par NomProduit et par Option (Group By p.NomProduit, o.Option)

Mais pour forcer l'extraction des produits qui n'ont pas d'options il faut utiliser une jointure externe à gauche (du côté de la table produits) ce qui donne :

Code : Tout sélectionner

SELECT p.NomProduit,o.Option FROM produits AS p left join OptionProduit AS o On p.Id=o.Id GROUP BY p.NomProduit, o.Option
NB. Dans tous les cas, le résultat de la requête retourne des doublons de noms pour toutes les options d'un même produit
Ce n'est qu'au niveau PHP que tu pourras éviter de retraiter les noms en double

par Ajoloca » 28 nov. 2006, 14:54

Effectivement, manque la clause GROUP BY.

Merci LHDN92!

par DocType » 28 nov. 2006, 14:47

Code : Tout sélectionner

SELECT p.NomProduit,o.Option FROM produits AS p, OptionProduit AS o WHERE p.Id=o.Id GROUP BY o.Option
Me semble que ça peut être correct...en tout cas, ca affichera noproduit seulement si il a au minimum une option :roll:

par Ajoloca » 28 nov. 2006, 14:45

Bonjour,

La première chose à faire est de modiffier ta requête pour quelle te donne les informations nécessaires, tu dois lier les deux tables soit par jointure (JOINT) soit avec la clause WHERE.

Un exp. avec WHERE

Code : Tout sélectionner

SELECT NomProduit, ta_col_dans_OptionProduit FROM produit, OptionProduit WHERE OptionProduit.idProduit = produit.idProduit
Fais afficher le résultat et tu véras ce qu'il faut faire en PHP/HTML pour obtenir le résultat escompté.

Une petite indication, pense à 'option group' de HTML

Création d'un select avec le données d'une DB Mysql

par bercy » 28 nov. 2006, 14:19

Bonjour @ tous,

est-il possible de créer un select à partir de 2 requêtes.

Je sais le faire sur une requête simple du genre
echo"<select>";
$result=mysql_query("SELECT NomProduit FROM produits");
while ($row = mysql_fetch_row($result)) {
echo"<option>$row[0]</option>";
    }
echo"</select>";
Avec ce code, je récupère donc le nom de tous mes produits dans ce select. J'aimerai récupérer tous mes produits avec les options associé à ces produits.

Chaque option de chaque produit se trouve dans une autre table appellé OptionProduit et ces options sont lié via avec la table produit via le N° Id du produit.

Pour résumer actuellement dans mon select je récupère ceci
NomProduit1
NomProduit2
NomProduit3
Etc

Ce que je souhaite faire c'est
NomProduit1
Option1
Option2

NomProduit2

NomProduit3
Option1

Etc


Si quelqu'un peut m'aider ???



Merci d'avance.