afficher toutes les enregistrements d'une table ext.

afficher toutes les enregistrements d'une table ext. - SQL/NoSQL - Programmation

Marsh Posté le 19-10-2006 à 13:03:41    

Bonjour,
 
J'ai 2 tables : produits & couleurs
dans la 1ere j'ai : id_produit / nom / couleur1 (clé externe)/ couleur2 (clé externe)
dans la 2de j'ai : id_couleur / couleur
 
Quand j'appelle le nom des couleurs pour un produit je fais :
$sql = "SELECT p.id_produit, p.nom, p.couleur1, p.couleur2, pd.couleur FROM produits p, couleurs pd WHERE  p.couleur1=pd.id_couleur ";
 
J'obtiens bien le nom de mes couleurs (et pas leur identifiant...)
Mais ça ne marche que pour une couleur. Ca ne m'affiche pas toutes les couleurs enregistrées.
Bon c'est normal puisque je mets p.couleur1=pd.id_couleur
mais comment faire pour que ça m'affiche tout?
 
Merci d'avance
(1ere question d'une gde série  :pt1cable:)

Reply

Marsh Posté le 19-10-2006 à 13:03:41   

Reply

Marsh Posté le 19-10-2006 à 13:15:24    

where pd.id_couleur in (p.couleur1, p.couleur2) ?
 
ou encore
 
WHERE  p.couleur1=pd.id_couleur or p.couleur2=pd.id_couleur?
 
 
OU alors j'ai mal compris la question...?


Message édité par skeye le 19-10-2006 à 13:19:52

---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 19-10-2006 à 13:16:45    

en fait j'ai mal compris, je crois.[:joce]
 
Ce serait plutot ça :
 
SELECT p.id_produit, p.nom, p.couleur1, p.couleur2, pd.couleur, pd2.couleur FROM produits p, couleurs pd, couleurs pd2 WHERE  p.couleur1=pd.id_couleur and  
p.couleur2=pd2.id_couleur


Message édité par skeye le 19-10-2006 à 13:17:14

---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 19-10-2006 à 13:31:13    

Merci!!
 
Bon vu qu'en réalité je peux avoir jusqu'à 8 couleurs, ça fait un code à rallonge! Y'a pas une astuce?
 
D'autre part pour afficher les couleurs sont le site j'utilisais :
 echo stripslashes($prod['couleur'])."<br />";
Mais ça ne m'affiche toujours qu'une seule couleur :(
COmment faire?

Reply

Marsh Posté le 19-10-2006 à 13:32:53    

Il suffit de mettre un alias sur tes champs.
 
select p.id_produit, p.nom, p.couleur1, p.couleur2, pd.couleur c1, pd2.couleur c2...
 
Et si tu as autant de couleurs dans ta table produit, tu aurais dû créer une table intermédiaire qui stocke le lien couleur<->produit, ce serait beaucoup plus simple...:o


Message édité par skeye le 19-10-2006 à 13:33:30

---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 19-10-2006 à 13:53:39    

Merci
...
pour appeler ensuite? je fais  
 echo stripslashes($prod['couleur c2'])."<br />";
 echo stripslashes($prod['couleur c1'])."<br />";
apparement pas :/
 
pour la 3e table j'y avais pensé... mais pt pb de code dans les where... alors je verrai plus tard...

Reply

Marsh Posté le 19-10-2006 à 13:54:38    

c1 ou c2 tout simplement.
la 3eme table si tu peux encore la créer, c'est la meilleure solution, hein...


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 19-10-2006 à 14:44:45    

SUPER ca marche :))
Merci.
 
Je vais voir pour ma 3e table ;)

Reply

Marsh Posté le 19-10-2006 à 14:46:37    

euh... une petite indication pour mettre le résultat de ces couleurs dans une liste déroulante?

Reply

Marsh Posté le 19-10-2006 à 14:48:43    

mia84 a écrit :

euh... une petite indication pour mettre le résultat de ces couleurs dans une liste déroulante?


quel est le problème? :D


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 19-10-2006 à 14:48:43   

Reply

Marsh Posté le 19-10-2006 à 14:57:28    

lol
 en fait... j'y arrive pa!!
 
j'ai un truc de ce type :
echo '<select size=1 name="couleur">'."\n";  
echo '<option value="-1">Couleur(s)<option>'."\n";  
 
// Récupération des informations  
 
$sql = "SELECT p.couleur1, p.couleur2, pd.couleur c1, pd.couleur c2 FROM peel_produits, couleurs WHERE p.couleur1=pd.id_couleur AND p.couleur2=pd2.id_couleur ";  
$ReqLog = mysql_query($sql, $connexion);  
 
while ($resultat = mysql_fetch_row($ReqLog)) {  
echo '<option value="'.$resultat[0].'">'.$resultat[1];  
echo '</option>'."\n";  
}  
 
echo '</select>'."\n";  

Reply

Marsh Posté le 19-10-2006 à 14:59:21    

flemme de chercher ce qui va pas, quel est le pb du résultat obtenu?:o


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 19-10-2006 à 15:30:02    

c'est vide! (sauf Couleur(s) )

Reply

Marsh Posté le 19-10-2006 à 15:30:51    

et quand tu affiches le source de la page tu as quoi?


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 19-10-2006 à 16:59:24    

effectivement j'ai rien :
 
 
<br />noir<br />bleu<br /><select size=1 name="couleur">
<option value="-1">Couleur(s)<option>
</select>
 

Reply

Marsh Posté le 19-10-2006 à 17:02:11    

on dirait bien qu'il rentre pas dans ton while...[:dawao]
 
t'es sûre que ta requête retourne quelquechose, là?


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 19-10-2006 à 17:17:21    

a vrai dire je ne suis de rien moi!!
 Mais qd je fais ma requete sans essayer de la mettre dans une liste ça marche :/

Reply

Marsh Posté le 19-10-2006 à 17:19:55    

en tout cas les indices que tu utilises me paraissent foireux...0 et 1 ça va être les id de tes couleurs, non? :o


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 19-10-2006 à 18:02:37    

Mouais...
 
vé reflechir à la question et je reviens...
QQ'1 a une super méthode pour faire des listes deroulantes à partir d'un bd?

Reply

Marsh Posté le 20-10-2006 à 09:02:03    

Ta méthode serait probablement très bien si tu comprenais ce que tu fais, en fait.[:dawao]


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 20-10-2006 à 19:58:14    

Y'a pas moyen de modifiter ta base, de façon à stocker les liens entre produit/couleur dans une table dédiée ? Ca résoudrait un peu tous tes problèmes d'un coup, et surtout ça te permettra de stocker autant de couleurs que tu désires...

Reply

Marsh Posté le 20-10-2006 à 21:36:14    

bin si je vé reflechir à ça!
Merci

Reply

Marsh Posté le 23-10-2006 à 00:57:26    

produit (id, nom, etc.)
couleur (id, nom, etc.)
couleurproduit (pro_id, col_id)
 
Avec les FK : couleurproduit.pro_id = produit.id et couleurproduit_col_id = couleur.col_id
 
Ainsi, tu peux avoir autant de couleurs que tu veux pour un même produit, et tu récupères le tout de la façon la plus simple du monde :
 

select p.nom NomProduit, c.nom NomCouleur
from produit p inner join couleurproduit cp on cp.pro_id = p.id inner join couleur c on cp.col_id = c.id


 
enjoy :)

Reply

Marsh Posté le 23-10-2006 à 09:33:27    

merci :D

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed