簡體   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