0

我有一张桌子,里面有一个很大的产品库。

我有几个过滤器可以通过 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 种产品,因此使查询采用驴。

4

1 回答 1

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)

于 2013-05-18T13:43:15.987 回答