#php #mysql
#php #mysql
Вопрос:
Я пытаюсь выяснить, как выполнить запрос, который выглядел бы примерно так:
$query = "SELECT RegPrice, OnSalePrice
Math.abs(Math.max(100 - (OnSalePrice) / (RegPrice) * 100)) AS DiscountIS
FROM Products";
Таким образом, это взяло бы RegPrice amp; OnSalePrice и дало бы мне процент от скидки и вернуло бы его как DiscountIS вместе с другими 2 значениями.
Запрашиваем ДВА и получаем обратно ТРИ.
Есть идеи?? Спасибо!
Ответ №1:
Ваш запрос в написанном виде синтаксически корректен, за исключением того, что вы пропускаете запятую после OnSalePrice и вам не следует ставить Math.
перед abs или max. Вероятно, вам также следует закончить его точкой с запятой, но обычно это не имеет значения. Итак, правильный запрос был бы:
$query = "SELECT RegPrice, OnSalePrice, ABS(MAX(100 - (OnSalePrice) / (RegPrice) * 100)) AS DiscountIS FROM Products;";
(Я также написал заглавными буквами ABS и MAX, но это всего лишь выбор стиля. SQL игнорирует регистр во всех командах и функциях.)
Однако с этим запросом есть проблема, которая заключается в том, что MAX является агрегатной функцией, поэтому она возвращает максимальное значение для всей таблицы. Таким образом, при использовании агрегатных функций, таких как MAX, вы также не можете выбирать другие атрибуты. Итак, если вы хотите, чтобы каждый элемент отображал свою RegPrice, OnSalePrice и скидку, правильный способ сделать это — просто не указывать MAX . (Я подозреваю, что это то, что вы хотите сделать, поскольку функция Math.max выдает только максимум своих аргументов. Но я не уверен, потому что в этом случае вы указали только один аргумент.)
$query = "SELECT RegPrice, OnSalePrice, ABS(100 - (OnSalePrice) / (RegPrice) * 100) AS DiscountIS FROM Products;";
Если вы действительно хотите узнать обычную цену, цену продажи и скидку того, у кого самая большая скидка, это немного более сложный запрос, который должен быть обработан путем выполнения ВЫБОРА внутри ВЫБОРА.
$query = "SELECT RegPrice, OnSalePrice, ABS(100 - (OnSalePrice) / (RegPrice) * 100) AS DiscountIS FROM Products WHERE ABS(100-OnSalePrice/RegPrice*100)=(SELECT ABS(MAX(100-OnSalePrice/RegPrice*100)));";
Следует отметить, однако, что, как написано, в любой версии, если OnSalePrice больше RegPrice, то это все равно будет отображаться как скидка, и что если RegPrice равен нулю, результатом будет деление на ноль.
Комментарии:
1. Извините, я думал с jQuery по математической части. Что я хочу, так это выполнить запрос и получить все значения из базы данных с возвращенными данными и процентным значением.