J'ai des données de produits récupérées dans la base de données et je souhaite les utiliser sur mon site Web. Je souhaite écrire une requête qui renvoie tous les éléments portant le titre "%EXAMPLE%" mais uniquement des produits uniques.
Le problème est que j'ai plusieurs lignes pour 1 article et je souhaite seulement renvoyer 1 ligne par produit (je gratte tous les jours, donc j'obtiens des lignes supplémentaires par article chaque jour). La seule différence entre les lignes est qu'elles ont une autre date et un autre prix, puisque c'est l'historique des prix que je recherche.
Exemple : Nous avons 3 articles : chocolat rose, pommes roses et poires roses. Il y a 3 rangées pour chaque article car j'ai gratté 3 fois. Par exemple (pour les besoins de cet exemple, je n'ai pas ajouté toutes les autres colonnes) :
ID produit | Titre | Prix | Disponible |
---|---|---|---|
ABC123DEF | Pomme Rose | 0,47 | 1 |
ABC123DEF | Pomme Rose | 0,42 | 1 |
ABC123DEF | Pomme Rose | 0.41 | 1 |
ABC333FHG | Poire Rose | 0.41 | 1 |
ABC333FHG | Poire Rose | 0.41 | 1 |
ABC333FHG | Poire Rose | 0.41 | 1 |
FH5845FJG | Chocolat Rose | 0.41 | 1 |
FH5845FJG | Chocolat Rose | 0.41 | 1 |
FH5845FJG | Chocolat Rose | 0.41 | 1 |
Le résultat que je souhaite obtenir est :
ID produit | Titre | Prix | Disponible |
---|---|---|---|
ABC123DEF | Pomme Rose | 0,47 | 1 |
ABC333FHG | Poire Rose | 0.41 | 1 |
FH5845FJG | Chocolat Rose | 0.41 | 1 |
Il semble que je doive rechercher le titre, puis filtrer les identifiants de produit en double afin d'obtenir les résultats corrects. Mais je ne sais pas comment faire.
Des idées ?
Un exemple :
La requête enregistre la ligne de prix le plus élevé pour chaque ID de produit et supprime les autres lignes de ce produit.
https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=40df8e8e4b3eb206e0f73b7ce3a70a a5一个>
Remarque : chaque ligne complète qui doit être stockée est unique (les lignes qui doivent être supprimées peuvent avoir des doublons complets).
Cette requête ne nécessite pas que les lignes soient uniques, auquel cas une seule copie de la ligne est renvoyée. Si vous avez besoin de toutes les copies, utilisez RANK() ou DENSE_RANK() au lieu de ROW_NUMBER().
Solution pour la version MySQL 5.x.