我有一张表格,展示了一个庞大的产品库。
我有几个过滤器可以通过Kendo Grid应用到表中,但我遇到的问题只涉及MySQL。
我有一个日期范围过滤器,需要按销售时过滤产品列表。
我遇到的问题是,由于产品可能已售出多次,因此会导致产品系列重复,因为它们例如是一个产品的四个“dateSold”行。我知道为什么会这样,但我无法弄清楚如何为我的过滤器做语法:
SELECT ...
FROM parts_library
LEFT JOIN parts_sale_dates AS PSD ON PSD.partLibId = parts_library.id
应用日期过滤器时,它看起来像这样:
SELECT ...
FROM parts_library
LEFT JOIN parts_sale_dates AS PSD ON PSD.partLibId = parts_library.id
WHERE PSD.dateSold >= ?
另一个问题是做:
SELECT ...
FROM parts_library
LEFT JOIN parts_sale_dates AS PSD ON PSD.partLibId = parts_library.id
使查询采用驴,因为有大约500,000个产品。
答案 0 :(得分:1)
我认为你正在寻找像“之间”这样的东西:
SELECT ...
FROM parts_library pl LEFT JOIN
parts_sale_dates psd
ON PSD.partLibId = pl.id
WHERE PSD.dateSold between <DATE1> and <DATE2>;
如果您希望只没有重复的部分,您可以将其表达为:
SELECT distinct pl.*
FROM parts_library pl LEFT JOIN
parts_sale_dates psd
ON PSD.partLibId = pl.id
WHERE PSD.dateSold between <DATE1> and <DATE2>;
对于大数据集的表现,我不会说好。
以下是等效的,但应该有更好的表现:
select pl.*
from parts_library pl
where exists (select 1
from parts_sales_dates psd
where psd.partLibId = pl.id and
psd.dateSold between <DATE1> and <DATE2>
)
您可以通过parts_sales_dates(partsLibId, dateSold)
上的索引来提高效果。