[英]How to get specific column from one table and all other data from other table in php codeigniter
[英]How to get the value from the other table if one table column is empty
我的數據庫中有兩個表
兩者都有價格欄 。
如果任何產品有變化,那么產品表的價格列將被取消, 變化表中的價格列將具有一定的價值。
但是,如果產品沒有變化,那么產品表的價格列將具有一些值,但變化表中的價格列將沒有值
我想獲取所有價格從低到高的產品,反之亦然。
$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.