繁体   English   中英

如果一个表列为空,如何从另一表获取值

[英]How to get the value from the other table if one table column is empty

我的数据库中有两个表

  1. 产品
  2. product_variations

两者都有价格栏

如果任何产品有变化,那么产品表价格列将被取消, 变化表中价格列将具有一定的价值。

但是,如果产品没有变化,那么产品表的价格列将具有一些值,但变化表中的价格列将没有值

我想获取所有价格从低到高的产品,反之亦然。

$shopProducts = product::where(
    [
        "publish" => 'PUBLISH',
        'shop_id' => input::get('shopId')
    ]
)->orderBy('price', 'asc')
->paginate(12);

上面的查询返回的所有产品都是正确的,并将所有具有变化且价格列为空的产品放在最后。

但是我想要一个查询,该查询首先检查产品的价格列,如果它为null,然后转到产品变化表并搜索一个值,然后以desc或asc返回结果。

我不知道使用查询生成器执行此操作的完全本机方法,但是如果您使用的是sql数据库,则应该能够使用原始case语句执行此操作。 例如 ...

$shopProducts = product::SELECT(
    DB::raw("CASE WHEN product_variations.price IS NULL THEN product.price ELSE product_variations.price END AS price")
)->where(
    [
        "publish" => 'PUBLISH',
        'shop_id' => input::get('shopId')
    ]
)->orderByRaw('CASE WHEN product_variations.price IS NULL THEN product.price ELSE product_variations.price END', 'asc')
->paginate(12);

这应该与mssql或mysql一起使用,并且大多数数据库都支持某种类型的相似语法。 您只需要在select语句中添加任何其他所需的列即可。 您还需要加入product_variations表,此方法才能起作用。

原始选择和原始订单都绕过Laravel的查询构建器,并将您的语句直接传递到数据库,因此请小心如何构造查询。 Laravel不会为您消毒它们。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM