Comment obtenir des lignes spécifiques d'un tableau en utilisant "group by" et "order by"
P粉794851975
P粉794851975 2023-09-12 17:54:20
0
1
379

J'ai une table comme celle-ci :

tmp_id Disponibilité des produits (0 et 1) est_disponible(0 et 1) stock_count (entier) product_id (entier)
1 1 1 0 1
2 1 1 4 1

Je dois me procurer le premier produit disponible pour chacun product_id. Les produits disponibles doivent d'abord être vérifiés product_availability,然后检查is_available,最后检查stock_count。 (当 product_availability1 时,产品可用,然后 is_available1 并且库存中至少有一种产品1. )

Je souhaite afficher en premier les produits disponibles, s'il n'y a pas de produits disponibles, peu importe le produit affiché (en cas d'indisponibilité, le premier produit convient également).

(Dans l'exemple ci-dessus, je dois d'abord me procurer le produit pour tmp_id2.)

Question : Ma question est de savoir comment écrire une requête MYSQL pour répondre à mes besoins ?

Je peux obtenir mes produits dans l'ordre que je souhaite en utilisant la commande suivante, mais je ne sais pas quoi faire ensuite pour obtenir le premier produit existant en utilisant GROUP BY :

SELECT
    pa.*
FROM
    `product_advanced` AS `pa`
ORDER BY
    `pa`.`product_availability` DESC,
    `pa`.`is_available` DESC,
    `pa`.`stock_count` DESC
    

Remarque : Bien sûr, ce n'est qu'une simple démo de ce que j'ai, le code réel est plus complexe et comporte plusieurs jointures et autres éléments.

P粉794851975
P粉794851975

répondre à tous(1)
P粉055726146

Cela peut être fait en utilisant row_number() qui renvoie le numéro de ligne unique pour chaque ligne de la partition

WITH cte AS (
  SELECT *, ROW_NUMBER() OVER (PARTITION BY product_id ORDER BY product_availability DESC, is_available DESC, stock_count DESC) AS rn
  FROM product_advanced
)
SELECT tmp_id, product_availability, is_available, stock_count, product_id  
FROM cte 
WHERE rn = 1;
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!