Selam,
aşağıdaki örnekte take() (ya da limit) ile ilk row alınsın istiyorum ancak koşulu sağlayan tüm satırlar alınıyor. Bunu 'limit1' yazdığım kısımda nasıl kullanabilirim?
table1
----------------------------------
| id | name |
|---------------------------------
| 1 | pro1 |
| 2 | pro2 |
| 3 | pro3 |
----------------------------------
table2
-----------------------------------------------------
| id | start_date | end_date | product_id | daily | old_daily|
|----------------------------------------------------
| 1 | 2021-02-19 | 2021-03-21 | 1 | 700 | 800
| 2 | 2021-02-19 | 2021-03-21 | 2 | 400 | 550
| 3 | 2021-02-19 | 2021-03-21 | 3 | NULL | 700
| 4 | 2021-03-22 | 2021-04-21 | 2 | NULL | 600
| 5 | 2021-04-22 | 2021-05-21 | 2 | NULL | 600
-----------------------------------------------------
$query->select('table1.id', 'name',
\DB::raw('(CASE WHEN table2.daily IS NOT NULL THEN table2.daily ELSE table2.old_daily END) AS price'))
->join('table2', 'table1.id', '=', 'table2.product_id')
->where(function($sq) use ($postFrom) {
$sq->when($postFrom[0]=='0', function ($syq) {
$today = Carbon::now()->format('Y-m-d');
$syq->whereDate('end_date', '>=', $today)->take(1);
}, function ($stq) use ($postFrom) {
$stq->whereDate('start_date', '<=', $postFrom[0])
->whereDate('end_date', '>=', $postFrom[0]);
});
})->orderBy('price', 'desc');
postFrom ile tanımlanan kısım kullanıcıdan galen tarih değeri. Eğer henüz tarih girilmediyse 0 geliyor. Bu durumda da belirttiğim koşul üzerinden çalışmasını istiyorum. Çıkan sql sogusu üzerine LIMIT 1 kısmını sınırlandırmak istediğim bölüme yazdım. Bu sınırlamayı burada yapabilir miyim? Mümkünse nasıl yapabilirim?
select
`table1`.`id`, `name`,
(CASE WHEN table2.daily IS NOT NULL THEN table2.daily
ELSE table2.old_daily END) AS price
from `table1`
inner join `table2` on `table1`.`id` = `table2`.`product_id`
where (date(`end_date`) >= '2021-02-11' LIMIT 1)
or (date(`start_date`) <= '2025-02-11'
and date(`end_date`) >= '2025-02-11')
order by `price` DESC
Bu sorguda limit1 çalışmıyor. Limitsiz sorgu sonucu da şöyle oluyor:
----------------------------------
| id | name | price
|---------------------------------
| 1 | pro1 | 700
| 2 | pro2 | 400
| 3 | pro3 | 700
| 2 | pro2 | 600
| 2 | pro2 | 650
----------------------------------