Jump to content

Trouver tous les produits ayant une couleur particulière (requête SQL ?)


Recommended Posts

Bonjour,

 

Lorsque j'importe le catalogue produit de mon fournisseur, les couleurs s'importent en hexadécimal.

J'aimerai les traduire en nom classique pour que ce soit compréhensible par les clients.

Exemple : remplacer "#ffffff" par "Blanc"

 

Y a-t-il un moyen d'avoir une liste des produits ayant une couleur particulière (requête SQL ou autre moyen) ?

 

Je m'explique :

 

En effet, j'aimerai que tous les produits ayant pour couleur #000000 s'affichent.

Ainsi je pourrai aller dans la description du ou des produits ayant pour couleur #000000 pour trouver le nom de la couleur exacte, et donc la remplacer dans les attributs des produits.

Pour le noir et blanc c'est facile, mais il y a d'autres couleurs plus compliquées (blanc cassé, blanc crème...), et à l'oeil nu c'est difficile de les distinguer sans avoir accès à la description du produit.

 

D'avance merci pour votre aide !

 

Cordialement

post-846774-0-39760600-1435161395_thumb.png

Edited by MathieuG (see edit history)
Link to comment
Share on other sites

Salut,

 

Pourquoi

WHERE color="#000000" OR color="#202020" OR "#404020"

ne vous convien pas ?

Cela ne va pas, il faut que le résultat de la requête me donne tous les produits (leur ID au minimum) ayant pour couleur #202020 par exemple.

Et puis, je ne sais pas quelle requête il faudrait taper... Je ne suis pas très bon en SQL !

A moins qu'il y ait une autre solution que le SQL.

Link to comment
Share on other sites

Comme mentionné dans mon premier post, il y a des couleurs qui sont affichées en Hexadécimal dans les attributs de ma boutique.

Il faut que ces codes hexa soient définis par une couleur (en texte) pour que cela soit parlant pour les clients.

 

Lorsque le catalogue produit s'est importé automatiquement de mon fournisseur à ma boutique Prestashop, des produits se sont créés avec la couleur en code hexa.

Et dans la description des fiches produits il y a le nom des couleurs qui apparait (exemple : jean beige, jean blanc cassé...).

Ce sont ces informations (noms des couleurs) que je veux retrouver par la requête SQL, afin d'entrer manuellement dans les attributs le nom de la couleur correspondant au code hexa.

 

Est-ce clair lorsque je le formule comme cela ?

Link to comment
Share on other sites

Les custom attribue dans la fiche produit du BackOffice peuvent répondre à vos besoin. Il faut créer un <select> avec des <option value="#fffffe">Blanc cassé</option> pour chaque produit. Puis adapter les requête SQL en conséquences.

 

Edited by LuzoWeb (see edit history)
Link to comment
Share on other sites

Merci mais je n'ai pas du tout compris ce qu'il fallait faire, pouvez-vous détailler pas à pas (je ne sais pas trop coder...) ?

 

Je ne peux pas faire cela produit par produit, il y a plus de 5000 références en stock !

Link to comment
Share on other sites

(Mince! Je pensais que vous vouliez donner au client la possibilité de choisir/afficher les produits par couleur. Mais non, vous avez besoin d'une requête pour accélérer la correction)
 
 
Je résume votre problème comme ça (corrigez moi au besoin):

[ndc: Dans "catalogue> attribue/valeur> details" du BO,] certain nom de couleurs sont en hexadécimal.
Je dois les traduire en nom[...] les distinguer sans avoir accès à la description du produit[ndc: est impossible car un jean crème n'a pas le même code couleur qu'une chemise crème, et inversement, un même code couleur peut avoir un nom différent selon le produit]

.
.
.
.
.
.
.
.
Si je suis dans le vrai, le mieux est déjà d'identifier "les couleurs" à corriger:
Pour cela: identifier l'ID de l'attribue couleur (pour moi c'est l'ID 2, mais vous pouvez en avoir plusieurs)
 
post-1014924-0-99178200-1435440450_thumb.png

mysql> SELECT * FROM `ps_attribute_group` AS g
LEFT JOIN `ps_attribute` AS a ON(g.`id_attribute_group`=a.`id_attribute_group`)
LEFT JOIN `ps_attribute_lang` AS al ON(a.`id_attribute`=al.`id_attribute`)
WHERE g.`id_attribute_group` = 2 AND al.name LIKE "#%"

Là, vous devriez voire les enregistrements avec des noms de couleur en hexa.
 
 
Pour faire un copier/collé des __IDS__, faites :

SELECT GROUP_CONCAT(a.id_attribute) as IDS
FROM `ps_attribute_group` AS g
INNER JOIN `ps_attribute` AS a ON(g.`id_attribute_group`=a.`id_attribute_group`)
INNER JOIN `ps_attribute_lang` AS al ON(a.`id_attribute`=al.`id_attribute`)
WHERE g.`id_attribute_group` = 2
  AND al.name LIKE "#%"

 
Maintenant, il serrai avantageux d'afficher la description du produit avec le nom des couleur a corriger:
 

SELECT pl.description, al.name
FROM `ps_product` AS p
LEFT JOIN `ps_product_lang` AS pl ON(p.id_product=pl.id_product)
LEFT JOIN `ps_product_attribute` AS pa ON(p.`id_product`=pa.`id_product`)
LEFT JOIN `ps_product_attribute_combination` AS pac ON(pac.`id_product_attribute`=pa.`id_product_attribute`)
LEFT JOIN `ps_attribute` AS a ON(pa.`id_product_attribute`=pac.`id_attribute`)
LEFT JOIN `ps_attribute_lang` AS al ON(a.`id_attribute`=al.`id_attribute`)
WHERE a.id_attribute IN (__IDS__)

A ce stade vous devriez avoir identifié tout les enregistrements à corrigé avec les informations prévue a cette éffet.

L'étape suivante étant de faire un script en PHP pour nettoyer la déscription des produits afin d'identifier rapidement le nom des couleurs disponible pour chaque produit concerné: Enlevé les balises HTML, les mots de deux caractère les nom commun, etc etc... Si vous disposé d'un dictionnaire le nettoyage serra plus facile.

Couplé a un petit formulaire PHP avec du javascript, en quelques heures le travail peut être fait: 2 seconde pas correction. Genre : Double-click sur la couleur (la couleur se met en surbrillance, puis touche "v" pour que JavaScript place le text en surbrillance(Le nom de la couleur) dans l'input prévue a cette effet par le formulaire.


Dite moi ce qu'il en est pour continuer.
 

post-1014924-0-99178200-1435440450_thumb.png

Edited by LuzoWeb (see edit history)
Link to comment
Share on other sites

Bonjour,

 

C'est tout à fait cela, vous avez bien compris !

 

Merci, j'ai essayé d'entrer le code suivant dans mon PHPmyadmin :

SELECT * FROM `ps_attribute_group` AS g
LEFT JOIN `ps_attribute` AS a ON(g.`id_attribute_group`=a.`id_attribute_group`)
LEFT JOIN `ps_attribute_lang` AS al ON(a.`id_attribute`=al.`id_attribute`)
WHERE g.`id_attribute_group` = 2 AND al.name LIKE "#%"


SELECT GROUP_CONCAT(a.id_attribute) as IDS
FROM `ps_attribute_group` AS g
INNER JOIN `ps_attribute` AS a ON(g.`id_attribute_group`=a.`id_attribute_group`)
INNER JOIN `ps_attribute_lang` AS al ON(a.`id_attribute`=al.`id_attribute`)
WHERE g.`id_attribute_group` = 2
  AND al.name LIKE "#%"
  
SELECT pl.description, al.name
FROM `ps_product` AS p
LEFT JOIN `ps_product_lang` AS pl ON(p.id_product=pl.id_product)
LEFT JOIN `ps_product_attribute` AS pa ON(p.`id_product`=pa.`id_product`)
LEFT JOIN `ps_product_attribute_combination` AS pac ON(pac.`id_product_attribute`=pa.`id_product_attribute`)
LEFT JOIN `ps_attribute` AS a ON(pa.`id_product_attribute`=pac.`id_attribute`)
LEFT JOIN `ps_attribute_lang` AS al ON(a.`id_attribute`=al.`id_attribute`)
WHERE a.id_attribute IN (__IDS__)

Mais ça ne marche pas, j'ai une erreur :

 

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'SELECT GROUP_CONCAT(a.id_attribute) as IDS
FROM `ps_attribute_group` AS g
INNER ' at line 6 

 

 

Je ne souhaite pas faire de développement ou script particulier (pas de budget pour cela, et puis il y a moins de 100 couleurs différentes à traiter).

 

Y a-t-il un moyen simple sans procéder à un développement ?

 

Quelle est votre agence web (pour info, au cas où j'aie besoin de futurs développements) ?

 

Merci !

Link to comment
Share on other sites

L'erreur vient du fait que vous rentrez trois requêtes les une à la suite des autres. Il faut les séparer par des points virgules.

 

Mais en fait luzoweb vous indiquait trois méthodes différentes, trois SELECT. Ca n'a pas de sens de les exécuter les une à la suite des autres, même séparées par des ;  elles seront exécutées toutes les trois mais seule la dernière affichera un résultat.

 

Essayez donc chacune des trois requêtes proposées, mais une à la fois.

 

Mon sentiment (ce n'est pas une critique), vous n'avez pas la connaissance technique de base pour utiliser des outils comme PHPMyAdmin. Mon conseil est donc soit de lire une doc ou tuto sur le langage MySQL avant d'aller plus loin. Soit d'utiliser un outil qui vous permet de faire ce genre de recherches sans programmation, comme celui ci.

 

Crldt

Franck

Link to comment
Share on other sites

Merci Frank pour ce complément d'information.

 

Je connaissais votre outil, mais j'ai déjà le module StoreCommander.

Je n'y avais pas pensé mais peut-être qu'il sera capable de répondre à mon besoin...

 

Je vais voir ça !

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...