Sql 如何根据用户输入获取两个值之间的列
我被困在一个解决方案上,我想在put value中按用户获取列Sql 如何根据用户输入获取两个值之间的列,sql,laravel,eloquent,Sql,Laravel,Eloquent,我被困在一个解决方案上,我想在put value中按用户获取列 对于1000卢比。我希望所有数据低于1000 对于2000卢比,我希望数据介于1000和2000之间 对于3000卢比,我希望数据介于2000和3000之间 对于4000卢比。我希望数据介于4000和4000之间 我已经像下面那样做了,但它不起作用 $product = Product::select('product_price') ->get();
$product = Product::select('product_price')
->get();
foreach ($product as $value) {
if($value->product_price == 1000){
$prod1 = Product::join('company', 'timeline_product.company_id', '=', 'company.company_id')
->select('company.name', 'company.logo', 'timeline_product.company_id', 'timeline_product.product_name', 'timeline_product.product_desc', 'timeline_product.product_price','timeline_product.reward_points' ,'timeline_product.created_at', 'timeline_product.updated_at')
->where('timeline_product.product_price','<=',1000)
->orderBy('timeline_product.updated_at', 'desc')
->limit($limit)
->offset($offset)
->get();
// $post = array('result' => $prod1);
}elseif ($value->product_price == 2000) {
$prod2 = Product::join('company', 'timeline_product.company_id', '=', 'company.company_id')
->select('company.name', 'company.logo', 'timeline_product.company_id', 'timeline_product.product_name', 'timeline_product.product_desc', 'timeline_product.product_price','timeline_product.reward_points' ,'timeline_product.created_at', 'timeline_product.updated_at')
->whereBetween('timeline_product.product_price', [1000, 2000])
->orderBy('timeline_product.updated_at', 'desc')
->limit($limit)
->offset($offset)
->get();
// $post = array('result' => $prod2);
}elseif ($value->product_price == 3000) {
$prod3 = Product::join('company', 'timeline_product.company_id', '=', 'company.company_id')
->select('company.name', 'company.logo', 'timeline_product.company_id', 'timeline_product.product_name', 'timeline_product.product_desc', 'timeline_product.product_price','timeline_product.reward_points' ,'timeline_product.created_at', 'timeline_product.updated_at')
->whereBetween('timeline_product.product_price', [2000, 3000])
->orderBy('timeline_product.updated_at', 'desc')
->limit($limit)
->offset($offset)
->get();
// $post = array('result' => $prod3);
}elseif ($value->product_price == 4000) {
$prod4 = Product::join('company', 'timeline_product.company_id', '=', 'company.company_id')
->select('company.name', 'company.logo', 'timeline_product.company_id', 'timeline_product.product_name', 'timeline_product.product_desc', 'timeline_product.product_price','timeline_product.reward_points' ,'timeline_product.created_at', 'timeline_product.updated_at')
->whereBetween('timeline_product.product_price', [3000, 4000])
->orderBy('timeline_product.updated_at', 'desc')
->limit($limit)
->offset($offset)
->get();
// $post = array('result' => $prod4);
}
// array_push($product,$post);
}
$product=product::select('product\u price'))
->get();
foreach($product as$value){
如果($value->product\u price==1000){
$prod1=Product::join('company'、'TIMENDARY\U Product.company\U id'、'='、'company.company\U id')
->选择('company.name'、'company.logo'、'timeline\u product.company\u id'、'timeline\u product.product\u name'、'timeline\u product.product\u desc'、'timeline\u product.product\u price'、'timeline\u product.reward\u points'、'timeline\u product.created\u at'、'timeline\u product.Update\u at')
->其中('timeline\u product.product\u price',”我想这就是您需要的:
Product::join('company', 'timeline_product.company_id', '=', 'company.company_id')
->select('company.name', 'company.logo', 'timeline_product.company_id', 'timeline_product.product_name', 'timeline_product.product_desc', 'timeline_product.product_price', 'timeline_product.reward_points', 'timeline_product.created_at', 'timeline_product.updated_at')
->when(request('product_price') <= 1000, function ($q) {
$q->where('timeline_product.product_price', '<=', 1000);
})
->when(request('product_price') > 1000 && request('product_price') <= 2000, function ($q) {
$q->whereBetween('timeline_product.product_price', [1000, 2000]);
})
->when(request('product_price') > 2000 && request('product_price') <= 3000, function ($q) {
$q->whereBetween('timeline_product.product_price', [2000, 3000]);
})
->when(request('product_price') > 3000 && request('product_price') <= 4000, function ($q) {
$q->whereBetween('timeline_product.product_price', [3000, 4000]);
})
->orderBy('timeline_product.updated_at', 'desc')
->limit($limit)
->offset($offset)
->get();
Product::join('company'、'timeline\u Product.company\u id'、'='、'company.company\u id')
->选择('company.name'、'company.logo'、'timeline\u product.company\u id'、'timeline\u product.product\u name'、'timeline\u product.product\u desc'、'timeline\u product.product\u price'、'timeline\u product.reward\u points'、'timeline\u product.created\u at'、'timeline\u product.Update\u at')
->当(请求(‘产品价格’)何处(‘时间线’产品价格’,’查看您的解释,您的产品列表似乎只有产品价格=1000、2000、3000和4000
因此,根据当前场景和您的代码,您似乎只有四种产品。下面是一个更准确的代码,它将根据价格返回列表中的所有产品-
$product = Product::select('product_price')->get();
$prods_according_price = [];
foreach ($product as $value) {
$end_filter = $value->product_price
$start_filter = $end_filter - 1000;
$prods_according_price[$end_filter][] = Product::join('company', 'timeline_product.company_id', '=', 'company.company_id')
->select('company.name', 'company.logo', 'timeline_product.company_id', 'timeline_product.product_name', 'timeline_product.product_desc', 'timeline_product.product_price','timeline_product.reward_points' ,'timeline_product.created_at', 'timeline_product.updated_at')
->whereBetween('timeline_product.product_price',[$start_filter, $end_filter])
->orderBy('timeline_product.updated_at', 'desc')
->limit($limit)
->offset($offset)
->get();
}
print_r ($prods_according_price)
您将获得如下输出:
Array(
[1000] => Array(
[0] => Array(.....),
[1] => Array(.....),
),
[2000] => Array(
[0] => Array(.....),
[1] => Array(.....),
),
[3000] => Array(
[0] => Array(.....),
[1] => Array(.....),
),
[4000] => Array(
[0] => Array(.....),
[1] => Array(.....),
)
)
如果有任何打字错误或警告,让我知道。因为我没有执行它
您希望将其分离还是全部放在一个变量中?@MohamedSabil83我希望所有数据都放在一个变量中如果用户选择1000,则只输出与我想要的1000相关的数据,所有数据都相同(&M)