|
Publicité ' | ||||||||||||||||||||||||
|
|
#1 |
|
Invité régulier
![]() Inscription : juin 2006 Messages : 47 ![]() |
Bonjour,
Voici mon problème : Je stocke les caractéristiques de mes produits dans un champ 'caracteristiques' sous la forme d'une chaine de caractères : /*caracteristique1*/valeur1/*caracteristique1*//*caracteristique2*/valeur2/*caracteristique2*//*caracteristique3*/valeur3/*caracteristique3*//*caracteristique4*/valeur4/*caracteristique4*/ où valeur4 est un nombre exemple 452. Je voudrais effectuer une comparaison à partir de données d'un formulaire où je sélectionne les valeurs de caracteristique4 < 150 comment est-il possible avec une requete mysql 3.23 de réaliser la recherche des valeurs de caracteristique4 inférieures à 150 puis même question pour des valeurs supérieures à 400 et meme question aussi pour des valeurs comprises entre 150 et 400 ? ----------------------- une idée serait d'extraire valeur4 avec une expression régulière en mysql puis la comparer à 150 si on cherche les valeurs de caracteristique4 inférieures à 150. avec une requete mysql du genre : SELECT * FROM table_produits WHERE( 150 > ( caracteristiques REGEXP '/\*caracteristique4\*/(.*)/\*caracteristique4\*/') ) Est-ce une bonne solution ? En avez-vous une meilleure ? |
|
|
00
|
|
|
#2 |
![]() ![]() Inscription : septembre 2010 Messages : 7 101 ![]() |
la meilleurs solution serai de créer une table caractéristique.
mysql 3.23 ??? tu sors d'un coma ?
__________________
http://blog.stealth35.com/ |
|
|
10
|
|
|
#3 |
|
Invité régulier
![]() Inscription : juin 2006 Messages : 47 ![]() |
J'ai essayé cette requete : ca fonctionne :
SELECT 150 > SUBSTRING(caracteristiques,LOCATE('/*a4*/',caracteristiques)+CHAR_LENGTH('/*a4*/'),LOCATE('/*a4*/',caracteristiques, LOCATE('/*a4*/',caracteristiques)+1)-LOCATE('/*a4*/',caracteristiques)-CHAR_LENGTH('/*a4*/')) ; => cela extrait la valeur comprise entre /*a4*/ entre /*a4*/ et cette valeur est comparée à 150. il reste à implémenter... une table caractéristique n'est pas une bonne solution à mon avis car on peut avoir différentes caractéristiques en fonction des produits. A débattre... |
|
|
00
|
|
|
#4 |
![]() ![]() Inscription : septembre 2010 Messages : 7 101 ![]() |
euh oui c'est le principe d'une base de donnée...
et c'est tout simplement LA meilleur solution
__________________
http://blog.stealth35.com/ |
|
|
00
|
|
|
#5 |
|
Invité régulier
![]() Inscription : juin 2006 Messages : 47 ![]() |
Dans ce cas pouvez-vous me dire comment je dois implémenter la table caractéristique
|
|
|
00
|
|
|
#6 | |
![]() ![]() Inscription : septembre 2010 Messages : 7 101 ![]() |
Citation:
id | id_produit | caracteristique | valeur voir même faire une autre table si les caractéristiques sont récurrentes
__________________
http://blog.stealth35.com/ |
|
|
|
00
|
|
|
#7 |
|
Expert Confirmé
![]() ![]() |
Pour préciser la réponse de stealth35, je te conseillerai de te ballader du côté des table dites EAV (Entity, Attribute, Value).
Elles sont très pratiques dans bien des situations. Mais n'oublie pas que ça ne remplace pas le design relationnel ça le complète avantageusement. |
|
00
|
|
|
#8 |
|
Invité régulier
![]() Inscription : juin 2006 Messages : 47 ![]() |
Comment fonctionnent ces tables dites EAV (Entity, Attribute, Value);
est-ce pratique dans le cas où l'on veut créer plusieurs caractéristiques par produit. Quelle sera la relation entre la table produit et les EAV. Merci de votre explication. |
|
|
00
|
|
|
#9 |
|
Invité régulier
![]() Inscription : juin 2006 Messages : 47 ![]() |
stealth35,
la table caracteristique telle que vous la décrivez ne sera pas pratique dans le cas d'une recherche d'un produit sur la base d'une réunion de plusieurs caractéristiques : caracteristique1=valeur11 and caracteristique2=valeur22 and caracteristique3=valeur33 and ... Voyez-vous |
|
|
00
|
|
|
#10 | |
![]() ![]() Inscription : septembre 2010 Messages : 7 101 ![]() |
Citation:
__________________
http://blog.stealth35.com/ |
|
|
|
00
|
|
|
#11 |
|
Invité régulier
![]() Inscription : juin 2006 Messages : 47 ![]() |
Admettons, si l'on part de la
table caracteristique : id | id_produit | caracteristique | valeur 1 produit1 c1 v1 2 produit1 c2 v2 3 produit1 c3 v3 . . . ---------------------- On lance une requete de recherche du produit ayant les valeurs v1 ou v2 le résultat sera produit1 On lance une requete de recherche du produit ayant les valeurs v1 et v2 le résultat sera nul Donc expliquez moi comment avec cette méthode on pourra réaliser des jointures de caractéristiques : avec and comme opérateur |
|
|
00
|
|
|
#12 |
![]() ![]() Inscription : septembre 2010 Messages : 7 101 ![]() |
y'a plein de façon de la faire, que ca soit avec des IN ou des JOIN,
http://dev.mysql.com/doc/refman/5.0/fr/join.html
__________________
http://blog.stealth35.com/ |
|
|
00
|
|
|
#13 |
|
Invité régulier
![]() Inscription : juin 2006 Messages : 47 ![]() |
Même en utilisant les jointures ou imbrications, le problème précédent subsite. On ne pourra pas obtenir avec cette structure de table, le résultat d'une recherche d'un produit impliquant plusieurs conditions de caractéristiques simultanées.
Il faudra toujours préciser WHERE( valeur='v1' and valeur='v2' ... ) Or cela donne un résultat nul et non produit1 |
|
|
00
|
|
|
#14 |
![]() ![]() Inscription : septembre 2010 Messages : 7 101 ![]() |
si, c'est juste que tu ne sais pas faire la requete...
__________________
http://blog.stealth35.com/ |
|
|
00
|
|
|
#15 |
|
Invité régulier
![]() Inscription : juin 2006 Messages : 47 ![]() |
J'ai fait ca :
SELECT * FROM produits INNER JOIN caracteristiques ON produits.ref_site=caracteristiques.id_produit WHERE(valeur='v2' and valeur='v1') le résultat est nul ou plutot vide ce que je trouve logique compte tenu de la structure de la table caracteristiques |
|
|
00
|
|
|
#16 |
![]() ![]() Inscription : septembre 2010 Messages : 7 101 ![]() |
sans faire le where tu dois bien voir si la jointure est bonne et il faut aussi choisir la caractéristique
__________________
http://blog.stealth35.com/ |
|
|
00
|
|
|
#17 |
|
Invité régulier
![]() Inscription : juin 2006 Messages : 47 ![]() |
Qu'est ce que vous proposez?
|
|
|
00
|
|
|
#18 | ||||
![]() ![]() Inscription : septembre 2010 Messages : 7 101 ![]() |
sans avoir la table je dirais :
Code :
Code :
__________________
http://blog.stealth35.com/ |
||||
|
|
00
|
|
|
#19 |
|
Invité régulier
![]() Inscription : juin 2006 Messages : 47 ![]() |
Ca n'a pas l'air de fonctionner,
voici mes tables : table produits : ref_site | nom_produit | .... et table caracteristiques : id | id_produit | carac | valeur les valeurs de id_produit correspondent à celles de ref_site Quelle sera la requete dans ce cas? |
|
|
00
|
|
|
#20 |
![]() ![]() Inscription : septembre 2010 Messages : 7 101 ![]() |
fais bien correspondre les noms de champs et table (ex : produits)
__________________
http://blog.stealth35.com/ |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com