I have a table set up as the following
ID COL1 COL2 COL3
----------------
10 200 n/a 125
11 150 130 n/a
12 100 300 200
13 500 n/a n/a
I've discovered two errors.
1. SQL
Your query works for your specific example, but try using a smaller number in COL2
or COL3
, then you'll discover it doesn't provide the results you're looking for.
Try this instead:
SELECT LEAST(
MIN(COL1),
MIN(COL2),
MIN(COL3)
)
FROM yourtable;
2. PHP
In order to use a mysql query in php, please check the manual on how this can be archived, your example isn't how it is done. If your query string is stored in $SQL
, then it could look like this:
/* 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);
}
I suspect using LEAST
will result in table scans. You may want to break it down manually (obviously, I expect indexes to be present on COL1
, COL2
and 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
I could not get least(min( to return any results, not the way I wanted to do it but I finally did part of the work in MySQL and part in php. Selected min from each row, filtered out the empty results (it returned n/a as empty) and then used PHP to sort and get lowest value. Here it is.
$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