选择多个列优先排序为一个

时间:2016-12-11 00:46:04

标签: php mysql laravel

数据库架构

我有三个主要表格:

  1. 产品
  2. 用户
  3. 这两个数据透视表:

    1. product_user
    2. GROUP_USER
    3. 每个用户都有一个组。 每个产品的价格都可以通过product_user数据透视表中的价格或group_user表中的价格覆盖。

      问题

      现在我知道如何加入这些表以及除了当前解决方案之外的所有内容我只能将这些价格中的每一个选择到单独的列,例如price,user_price和group_price,并使用PHP对它们进行优先级排序。

      问题

      是否可以从这些不同的表中选择这3列,并仅使用Sql将它们划分为一列?

      因此,如果有一个特定于用户的价格将此价格选入价格,如果没有,并且有一个特定于组的价格选择此价格,如果没有特殊价格,请选择产品默认价格。

      Laravel特定解决方案

      正如@Shadow在下面指出的,解决方案是MySQL合并功能。

      使用Laravel的查询构建器我现在能够使用此语句实现我想要的目标:

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

1 个答案:

答案 0 :(得分:1)

使用coalesce()函数从其参数返回第一个非空值。

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

由于您尚未与我分享确切的架构,因此我无法提供具体的帮助。我假设表中有价格列。