2016-12-11 13 views
0

データベーススキーマ私はこれらの三つの主要なテーブル持って1つの

に優先順位を付け、複数の列を選択します。

  1. 製品
  2. グループ
  3. ユーザー

そして、これら二つのピボットテーブルを:

  1. product_user
  2. group_user

各ユーザはグループを有しています。 各製品の価格は、product_userピボット・テーブルの価格またはgroup_user表の価格によってオーバーライドされる可能性があります。

問題

今、私はこれらのテーブルとすべてに参加する方法を知っているが、私の現在のソリューションで、私は価格だけ、user_priceとgroup_priceなどの別の列にこれらの価格のそれぞれを選択して使用してそれらに優先順位を付けることができていますPHP。

質問

それはこれらの異なるテーブルからこれらの3つの列を選択して、唯一のSQLを使用して1列にそれらを優先させることは可能ですか?

この価格を価格に選択した場合は、この価格を選択してグループ固有の価格があり、特別価格がない場合は製品のデフォルト価格を選択します。

Laravel特定溶液

@Shadow以下に指摘したように、溶液は、MySQL合体関数です。 Laravelのクエリビルダを使用して

私は今、私はこの文を使用して欲しいものを達成することができました:

​​

答えて

1

は、そのパラメータから第一null以外の値を返すために、COALESCE()関数を使用します。

select coalesce(product_user.price, group_user.price, product.price) as price 
from ... 

正確なスキーマを私と共有していないので、私はmpreの特定のヘルプを提供できません。私はテーブルに価格の列があると仮定します。

+0

この機能の心臓部はありませんが、非常に有望です。あなたは正しいと思いました;) –

関連する問題