Выберите только те строки, где min (column1) и min (column2)

У меня есть две таблицы. Первая таблица показывает id_product и product_price_value. Ниже я покажу вам один пример (в моей базе данных много строк)

ТАБЛИЦА: main_product

ID_product: product_price_value:
119, Product1

ТАБЛИЦА: значение_продукта

product_price_value: width_from: width_to: height_from: height_to: price:
Product1           ,         10,       20,           5,        15,   100
Product1           ,         10,       20,          10,        30,   200
Product1           ,         20,       30,           5,        45,   300
Product1           ,         30,       30,          20,        30,   400

Как видите, один продукт может иметь несколько измерений. Я хочу получить цену с самой низкой шириной и высотой в сочетании. В моем примере это должен быть первый ряд (ширина от -> 10, высота от -> 5).

Я использовал следующий код:

$sql = "SELECT value_product.price FROM value_product INNER JOIN main_product
ON (main_product.product_price_value = value_product.product_price_value
AND (
value_product.width_from = (SELECT MIN(value_product.width_from) FROM value_product)
AND value_product.height_from = (SELECT MIN(value_product.height_from) FROM value_product)
)
);";

Таким образом, я думал, что получу цену за самую низкую ширину / высоту для каждого продукта. Но единственные результаты, которые я получаю, это когда width_from ИЛИ height_from содержит значение 0. Если ширина или высота больше 0, то ничего не возвращается.

Я делаю что-то не так в своем запросе?

Есть ли способ получить цену с самыми низкими столбцами ‘width_from’ и ‘height_from’?

Спасибо

0

Решение

Если вам нужна такая цена только для одного продукта, вы можете просто отсортировать и ограничить:

SELECT   price
FROM     value_product
WHERE    product_price_value = ?
ORDER BY width_from + height_from
LIMIT    1

В противном случае вы после групповой минимум, что можно получить, присоединив таблицу обратно к сгруппированной версии самой себя:

SELECT   v.product_price_value,
v.price
FROM     value_product v
JOIN (
SELECT   product_price_value,
MIN(width_from + height_from) min_dimension
FROM     value_product
GROUP BY product_price_value
) t
ON t.product_price_value = v.product_price_value
AND t.min_dimension = v.width_from + v.height_from

В обоих случаях я предположил, что существует только одна запись с минимальными размерами. Если таких записей будет несколько, первый запрос выберет одну неопределенно; и второй запрос перечислит их все. Если это не ваше желаемое поведение, вам придется уточнить, что вы хотели бы вместо этого.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]