Я прочитал множество тем и статей и официальных MYSQL документов, но нигде не нашел чего-то, что помогло бы мне понять, как решить эту проблему.
Даже эта SO topi c не смогла сделать то, что мне нужно (в ней они не пытались искать значение больше 2, вы поймете, почему это проблема ).
Например, у меня есть диапазоны, определенные в таблице range_and_prices
:
---
| id | ranges_from | ranges_to | prices |
| --- | ----------- | --------- | ------ |
| 1 | 1 | 20 | 10 |
| 2 | 21 | 40 | 20 |
| 3 | 41 | 60 | 40
Когда я пытаюсь вставить продукт с total_quantity 5;
| product_id | product | total_quantity |
| ---------- | ------- | -------------- |
| 1 | Coffee | 5 |
я получаю результат моего карьера, как и должно быть (так как total_quantity равно 5, оно попадает в диапазон 1-20, а range_prices для этого равно 10):
| product_id | product | total_quantity | product_id | range_prices |
| ---------- | ------- | -------------- | ---------- | ------------ |
| 1 | Coffee | 5 | 1 | 10 |
НО, как только я пытаюсь попасть в другие диапазоны, я получить ноль для range_prices.
Если в скрипте я выбрал 25, результат должен быть:
| product_id | product | total_quantity | product_id | range_prices |
| ---------- | ------- | -------------- | ---------- | ------------ |
| 1 | Coffee | 25 | 1 | 20 |
Но я получаю ноль для всего, что больше 20 total_quantity.
Посмотреть на БД Fiddle
insert into `range`(`product_id`, `range_prices`) VALUES
((SELECT LAST_INSERT_ID() AS id FROM product ),
(SELECT prices FROM range_and_prices WHERE
(SELECT total_quantity FROM product WHERE product_id=id)
BETWEEN ranges_from AND ranges_to ORDER BY prices ASC
LIMIT 1 ) );
Мне кажется, я знаю, почему это так. Если я выбрал, например, 25, это число находится в диапазоне от 1 до 40, и результат для этого составляет два диапазона, и это путается. Я устал от всякого рода вещей, таких как ограничение результата, пытаясь получить максимальные и минимальные диапазоны, я пробовал около 20 разных вещей и каждый раз один и тот же результат. Эфир - это моя логика c, плохая или слишком большая для меня, чтобы я имел дело. Пожалуйста помоги.