小编Dju*_*uka的帖子

在 MySQL 数据库中存储具有价格历史和不同特异性(全局、用户组、单用户)的价格

我需要用他们的历史来存储价格。价格可以具有不同的特异性。它可以指单个用户(最具体)、组(不太具体)和产品价格(全局 - 最不具体)。还有两种不同类型的价格(产品价格和交货价格)。现在我遇到了这个问题。我让它工作了,但是当我编写查询时我不知何故感觉不好(它们往往变得冗长而复杂)。

我设计了两个这样的表(它们是相同的):

基本价格

| id | referent_id | product_id | valid_from | valid_until | amount | pieces_per_lot |
Run Code Online (Sandbox Code Playgroud)

交货价格

| id | referent_id | product_id | valid_from | valid_until | amount | pieces_per_lot |
Run Code Online (Sandbox Code Playgroud)

对于用户特定的价格参考 id 将是一个正整数,匹配用户 id。对于特定于组的价格参考 id 将是一个负整数,匹配组 id(我将组 id 设为负整数)。对于全球产品价格,参考 ID 将为 NULL。这样,当我查询特定项目和特定用户及其组的价格时,我需要做的就是按 item_id 过滤表并按 referent_id 列按降序排列结果。这样,特定于用户的在顶部,组之后和全局在最后。

两行的日期范围 valid_from-valid_until 不能重叠。

现在,获取当前价格的查询将如下所示:

SELECT 
    * 
FROM 
    base_prices AS outer 
WHERE 
    id = (
        SELECT 
            id 
        FROM 
            base_prices AS inner 
        WHERE 
                NOW() BETWEEN valid_from AND valid_until
            AND inner.item_id …
Run Code Online (Sandbox Code Playgroud)

mysql performance subquery query-performance

5
推荐指数
1
解决办法
831
查看次数

标签 统计

mysql ×1

performance ×1

query-performance ×1

subquery ×1