Ich habe eine Tabelle mit dem Namen products
, die alle Produkte enthält, z. B. T-Shirt und product_variants
, die die zugehörigen Varianten der Farben haben, z. Schwarz, Blau, Grün, jede hat eine stock
Spalte - das hält die Anzahl der übriggebliebenen Aktien.MySQL - IF in einem SELECT für mehrreihige Spaltenwerte
Ich möchte eine Abfrage erstellen, die mir sagen kann, welche der Produkte vollständig ausverkauft sind, und welche nicht.
Die stock
Spalte sollte 0 sein, um ausverkauft zu sein, aber wenn es NULL
oder > 0
ist, ist es auf Lager. NULL
wird verwendet, wenn wir unbegrenzte Mengen haben.
Dies ist das folgende Ergebnis i erhalten möchte:
product_id|soldOut|stock
------------------
1 |Yes |0
2 |Yes |0
3 |No |NULL
4 |No |1
Was ich versucht zu, ist die folgende:
- greifen alle Produkte
- Machen Sie einen Join product_variants
- Gruppieren Sie nach product_id, um nur ein Ergebnis pro Produkt anzuzeigen.
- der Auswahl product_id und
IF(stock > 0 OR stock IS NULL, 'No', 'Yes') as SoldOUt
Abfrage:
SELECT p.product_id, IF(pv.stock > 0 OR pv.stock IS NULL, 'No', 'Yes') as SoldOUt
FROM products p
JOIN product_variants pv ON (`pv`.`product_id` = `p`.`product_id`)
GROUP BY p.product_id
Die Ergebnisse ist, dass soldOut
nicht korrekt ist - es scheint, als ob es eine zufällige Reihe der Varianten nimmt gerade und überprüfen Sie die stock
dieser und Antworten.
Stattdessen sollte es alle Varianten Zeile überprüfen und sehen, wenn einige von ihnen noch nicht verkauftOut (mit der if-Anweisung oben) und dann eine endgültige Antwort für dieses Produkt zurückgeben.
Was habe ich falsch gemacht und wie kann dies erreicht werden?
Vielen Dank! Gab mir eine neue Art zu denken. – Karem