У меня есть две таблицы. Первая таблица показывает 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’?
Спасибо
Если вам нужна такая цена только для одного продукта, вы можете просто отсортировать и ограничить:
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
В обоих случаях я предположил, что существует только одна запись с минимальными размерами. Если таких записей будет несколько, первый запрос выберет одну неопределенно; и второй запрос перечислит их все. Если это не ваше желаемое поведение, вам придется уточнить, что вы хотели бы вместо этого.
Других решений пока нет …