首页 > 解决方案 > mysql触发器 - 将价格与数字相匹配

问题描述

我有一个名为“价格”的表和一个名为“Ranges_and_prices”的表。'Ranges_and_prices' 表存储带有价格的范围(即:1-20,10 英镑) 当有人输入价格时,当他们输入总数量时;它需要找到它所在的范围,然后在它旁边加上一个价格。例如,如果有人输入“Coffee, 3”,它将看到数字 3 并将其设置为 1-20 的范围,并给出 10 英镑的价格。

CREATE TABLE `prices` (
  `id` int(11) NOT NULL,
  `product` varchar(100) DEFAULT NULL,
  `total_quantity` int(11) DEFAULT NULL,
  `range` int(11) DEFAULT NULL,
  `price` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

-- --------------------------------------------------------

--
-- Table structure for table `range_and_prices`
--

CREATE TABLE `range_and_prices` (
  `id` int(11) NOT NULL,
  `ranges` varchar(100) DEFAULT NULL,
  `prices` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

--
-- Dumping data for table `range_and_prices`
--

INSERT INTO `range_and_prices` (`id`, `ranges`, `prices`) VALUES
(1, '1-20', 10),
(2, '21-40', 20);

我对此还是有点陌生​​,我只是想更好地理解触发器。我认为这将是插入后,但我不知道从那里去哪里。

任何帮助,将不胜感激 :)

标签: mysql

解决方案


正如我看到的那样,您还没有得到答案,我即将对我正在构建的应用程序进行几乎相同类型的计算,我在您的示例中试了一下。

首先要做的事情是:您不能使用触发器来在触发器所在的同一张桌子上执行操作。含义:当您插入新产品时,您无法立即触发更新同一产品。

你必须重新安排你的桌子,我建议添加一个新的。在新表中,您将拥有一个指向您的产品 ID的FOREIGN KEY ,以便您以后可以加入这两个表并获得结果。在这里,您将存储您想要的范围价格 + 产品 ID。

我还对您的表进行了一些必要的更改,我不会全部命名它们,我将解释触发器中发生的所有事情,因为即使对我来说当时也有点混乱。随意研究代码并提出问题。

我为您做了一个工作示例,我认为应该如何完成,结果如下:

架构(MySQL v5.7)

**Query #1**

    SELECT * FROM `range_and_prices`;

| id  | ranges_from | ranges_to | prices |
| --- | ----------- | --------- | ------ |
| 1   | 1           | 20        | 10     |
| 2   | 21          | 40        | 20     |
| 3   | 41          | 60        | 40     |

---
**Query #2**

    SELECT * FROM `product`;

| product_id | product | total_quantity |
| ---------- | ------- | -------------- |
| 1          | Coffee  | 5              |
| 2          | sugar   | 25             |

---
**Query #3**

    SELECT * FROM `product` INNER JOIN `range` ON product.product_id=range.product_id;

| product_id | product | total_quantity | product_id | range_prices |
| ---------- | ------- | -------------- | ---------- | ------------ |
| 1          | Coffee  | 5              | 1          | 10           |
| 2          | sugar   | 25             | 2          | 20           |

---

您可以在此处查看完整的工作触发器代码,并通过更改最后一个插入行对其进行测试:在 DB Fiddle 上查看

希望这会对您有所帮助。干杯。


推荐阅读