【发布时间】:2017-12-07 11:07:40
【问题描述】:
我正在使用 Laravel 5.2 构建大量产品库存,但在显示产品的查询时遇到了问题。示例如下:
我有很多产品——确切地说,在我的数据库中超过 20k。其中大部分我想每天展示,但大约 500-1000 我只需要在一周中的某些日子展示。
目前我已经回顾了以下方法,每种方法都有其缺点:
创建一个表product_availability,其中每一行将包含product_id、工作日和可用(真/假)列。但是,使用这种结构,我将有 7 行提供 1 个产品的信息,整个表将包含 ~ 140 000 行,我认为这不是一个好主意 - 因为大多数产品每天都可用,而且只有 500 -1000 不会。
-
我的第二个猜测是简单地在 products 表中添加一个“可用性”列,该列将包含以下格式的 JSON 字符串:
{“mo”:“true”,“tu”:“false”,“we”:“false”,“th”:“true”,“fr”:“false”,“sa”:“false” ", "su": "真"}
然后我会这样查询:
$weekday = date('N');
switch ($weekday) {
case '1':
$builder->where('$availability->mo', 'true');
break;
case '2':
$builder->where('$availability->tu', 'true');
break;
case '3':
$builder->where('$availability->we', 'true');
break;
case '4':
$builder->where('$availability->th', 'true');
break;
case '5':
$builder->where('$availability->fr', 'true');
break;
case '6':
$builder->where('$availability->sa', 'true');
break;
case '7':
$builder->where('$availability->su', 'true');
break;
}
但这个解决方案的 IMO 问题是它也将是一个缓慢而沉重的方法。
- 我的第三个猜测是向后工作,不是检查产品今天是否可用,而是检查哪一天不可用。这样,我将获得所有“可用性”列将为空的产品,并且对于这些产品,它运行一个 if 语句,然后以某种方式添加它们,但我也不知道如何构建它。
所以我的问题是:
什么是获取当今所有可用产品的最快查询,请记住,其中只有一小部分不可用(如何排除它们,也许)?
【问题讨论】:
标签: php mysql laravel-5 eloquent laravel-5.2