给出上面的图像...使用Laravel的雄辩能力-我如何查找特定的日期范围以返回该范围内的行?
我知道Laravel有一个处理传统日期字段的whereBetween函数,但由于这些是时间戳,我意识到我必须使用where('dates', '>=', $startTimestamp)
和where('dates', '<=', $endTimestamp)
之类的东西,但我也必须将其应用于从列展开的每个日期?
感谢大家的帮助!
发布于 2018-10-09 23:32:52
尽管它可能是糟糕的数据库设置,但有时必须按照当前的方式来做事情-出于业务原因或延迟或其他任何原因;难看的修复可能比全面大修更好-特别是在系统很小且仍将很小的情况下,不需要过多考虑处理速度。
以下是所提出问题的解决方案,利用MySQL表连接,从该连接响应中进行选择。这也是用Laravel编写的,因此是DB静态函数。
$temp = DB::select(DB::raw("select
leave_entries.id,
SUBSTRING_INDEX(SUBSTRING_INDEX(leave_entries.dates, ',', numbers.n), ',', -1) dates
from
(select 1 n union all
select 2 union all select 3 union all
select 4 union all select 5) numbers INNER JOIN leave_entries
on CHAR_LENGTH(leave_entries.dates)
-CHAR_LENGTH(REPLACE(leave_entries.dates, ',', ''))>=numbers.n-1
where uid = {$uid}
AND dates >= {$start_timestamp}
AND dates <= {$end_timestamp}
order by
id, n"));
// Return the resulting table:
dd($temp);
把这个留在这里,而不是删除问题,因为这可能会对某人有所帮助。
未来的人:在你的情况下-如果你可以重做数据库模式,而不是像我的问题的评论建议的那样,那么就这样做。
https://stackoverflow.com/questions/52724005
复制相似问题