Выберите наименьшее значение из нескольких столбцов с помощью PHP / MySQL

У меня есть таблица, настроенная как следующая

ID COL1 COL2 COL3 ---------------- 10 200 n/a 125 11 150 130 n/a 12 100 300 200 13 500 n/an/a 

Помимо идентификатора, все столбцы TEXT.

Используя PHP и MySQL, мне нужно выбрать минимальный «номер» из COL1, COL2, COL3, в этом случае это будет 100 (из строки 12, COL1).

Я попробовал это:

 $query = ("SELECT MIN(LEAST(COL1,COL2,COL3)) FROM rug AS 'query1'"); 

но я думаю, что что-то не так с MIN (LEAST, а также с AS 'query1'). Я получаю предупреждение:

 Warning: mysql_numrows(): supplied argument is not a valid MySQL result resource 

Есть предположения? Благодаря!

Solutions Collecting From Web of "Выберите наименьшее значение из нескольких столбцов с помощью PHP / MySQL"

Я обнаружил две ошибки.

1. SQL

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

Попробуйте это вместо этого:

 SELECT LEAST( MIN(COL1), MIN(COL2), MIN(COL3) ) FROM yourtable; 

2. PHP

Чтобы использовать mysql-запрос в php, пожалуйста, ознакомьтесь с руководством по тому, как это можно заархивировать, а ваш пример – не так, как это делается. Если ваша строка запроса хранится в $SQL , она может выглядеть так:

 /* querying... */ $result = mysql_query($SQL); /* handling possible errors */ if (!$result) { die('Invalid query: ' . mysql_error()); } /* handling the response */ while ($row = mysql_fetch_assoc($result)) { var_dump($row); } 

Я подозреваю, что использование метода LEAST приведет к сканированию таблиц. Вы можете разбить его вручную (очевидно, я ожидаю, что индексы будут присутствовать на COL1 , COL2 и COL3 ):

 SELECT ID, VALUE FROM ( SELECT ID, COL1 AS VALUE FROM MYTABLE ORDER BY COL1 ASC LIMIT 1 UNION SELECT ID, COL2 AS VALUE FROM MYTABLE ORDER BY COL2 ASC LIMIT 1 UNION SELECT ID, COL3 AS VALUE FROM MYTABLE ORDER BY COL3 ASC LIMIT 1 ) ORDER BY VALUE ASC LIMIT 1 

Я не мог получить меньше всего (мин (чтобы возвращать любые результаты, а не так, как я хотел это сделать, но я, наконец, сделал часть работы в MySQL и частично в php). Выбрал min из каждой строки, отфильтровал пустые результаты (он вернулся n / a как пустой), а затем использовал PHP для сортировки и получения самого низкого значения.

 $query = ("SELECT LEAST(COL1,COL2,COL3) FROM rug WHERE COL1 != '' AND COL2!= '' AND COL3 != ''"); $result=mysql_query($query); if (!$result) { die('Invalid query: ' . mysql_error()); } $num=mysql_numrows($result); $i=0; while ($i < $num) { $pricing[$i]=mysql_result($result, $i); $i++; } sort($pricing); $lowest_price = $pricing[0]; //lowest price