je suis actuellement en train de m'entrainer en php et j'ai un petit problème !
en gros là je suis en train de faire une class de gestion de produits (ça peut être n'importe quoi voiture,livres etc.. ) , j'ai donc une table produit avec quelques champs principale (id,titre,description) , et j'ai créer à coté un petit formulaire pour rajouter des caractéristique pour tout les produits dynamiquement , j'ai donc une 2eme table produit_caract(id,caracteristique) , et pour pouvoir mettre une valeur à ses caractéristique pour les produits différents il y a une 3eme table produit_caract_value(id,valeur,cle_etrangere_article,cle_etrangere_caract) .
donc maintenant j'aimerai savoir comme récuperer les valeurs des caracteristiques de chaque produit en une seule ligne (table produit+table produit_caract_value), j'ai essayé avec une jointure mais ça me retourne autant de fois le même produit qu'il a de caractéristique (ce qui est normal ) .
donc si vous avez une réponse pouvant m'aider je vous remercie d'avance !!
Primo, ta troisième table ne sert strictement à rien.
Deuxio, ce qui tu veux faire n'est pas possible. Tu ne pourras pas les ramener sur une seule ligne.
Si tu sais que tu as un nombre maximum de caracteristiques sur un produit, tu peux toujours faire (par exemple) 3 colonnes carac1, carac2 et carac3. C'est pas beau, c'est pas propre mais ca peut dépanner.
La façon propre de faire ce que tu veux c'est de traiter la réponse de ta requête SQL. Quand tu récupères les données, tu construis les objects.
Par exemple, tu auras un object produit :
Produit
{
String id, titre, description;
List caracteristiques;
}
(Désolé pour la syntaxe, je ne connais pas php).
Et quand tu récupères tes données en php, tu ajoutes soit un produit, soit une caractéristique à un produit.
En gros ta boucle va être :
var mesproduits;
var monresultat = "select * from produit a, table_produit_carac b where a.id = b.id";
foreach ( monresultat : m)
{
si ( mesproduits ne contient pas m)
{
mesproduits.add( m );
}
sinon
{
var unproduit = mesproduits.get( m.id );
unproduit.addCaracteristique(m.caracteristique);
}
}
Trouvez des réponses à vos questions sur les langages, les frameworks et les astuces de codage. Échangez avec d'autres développeurs passionnés pour améliorer vos compétences en programmation et rester au fait des dernières tendances du secteur.
Modifié par zoubida le 7/02/2012 à 11:53
7 févr. 2012 à 14:02
Si tu sais que tu as un nombre maximum de caracteristiques sur un produit, tu peux toujours faire (par exemple) 3 colonnes carac1, carac2 et carac3. C'est pas beau, c'est pas propre mais ca peut dépanner.
La façon propre de faire ce que tu veux c'est de traiter la réponse de ta requête SQL. Quand tu récupères les données, tu construis les objects.
Par exemple, tu auras un object produit :
Produit
{
String id, titre, description;
List caracteristiques;
}
(Désolé pour la syntaxe, je ne connais pas php).
Et quand tu récupères tes données en php, tu ajoutes soit un produit, soit une caractéristique à un produit.
En gros ta boucle va être :
var mesproduits;
var monresultat = "select * from produit a, table_produit_carac b where a.id = b.id";
foreach ( monresultat : m)
{
si ( mesproduits ne contient pas m)
{
mesproduits.add( m );
}
sinon
{
var unproduit = mesproduits.get( m.id );
unproduit.addCaracteristique(m.caracteristique);
}
}
Bon c'est l'idée quoi :)