![](/img/trans.png)
[英]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.