2016-12-11 8 views
0

Datenbankschemapriorisiert mehrere Spalten in einer

Ich habe diese drei Haupttabellen:

  1. Produkte
  2. Gruppen
  3. Benutzer

Und diese zwei Pivot-Tabelle :

  1. product_user
  2. group_user

Jeder Benutzer eine Gruppe aufweist. Jedes Produkt hat einen Preis, der durch einen Preis in der Pivot-Tabelle product_user oder durch einen Preis in der Tabelle group_user überschrieben werden kann.

Problem

Jetzt weiß ich, wie diese Tabellen und alles zu verbinden, aber mit meiner aktuellen Lösung, die ich nur in der Lage bin jeden dieser Preise zu einer separaten Spalte wie Preis, user_price und group_price und priorisieren sie wählen mit PHP.

Frage

Ist es möglich, diese 3 Spalten aus diesen verschiedenen Tabellen auszuwählen und sie in eine Spalte priorisieren nur mit SQL?

Wenn also ein benutzerspezifischer Preis ausgewählt wurde, wird dieser Preis in den Preis übernommen. Wenn nicht, wird ein gruppenspezifischer Preis ausgewählt, und wenn kein Sonderpreis angegeben ist, wählen Sie den Standardpreis des Produkts aus.

Laravel spezifische Lösung

@Shadow Wie unten ausgeführt, ist die Lösung, die MySQL Funktion koaleszieren.

Mit Laravel der Query Builder ich nun in der Lage war, zu erreichen, was ich diese Aussage will mit:

$query->addSelect(
    DB::raw('coalesce(product_user.price, group_product.price, products.price) as price') 
); 

Antwort

1

Verwenden Sie die coalesce() gibt den ersten Nicht-Null-Wert von seinen Parametern zurückzukehren.

Da Sie das genaue Schema nicht mit mir geteilt haben, kann ich keine MPRE-spezifische Hilfe bereitstellen. Ich nehme an, dass es in den Tabellen Preisspalten gibt.

+0

Nie Herz dieser Funktion, aber es klingt sehr vielversprechend. Und du hast richtig angenommen;) –

Verwandte Themen