Select Smallest Value From Multiple Columns with PHP/MySQL

前端 未结 3 843
无人及你
无人及你 2020-12-21 11:47

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
相关标签:
3条回答
  • 2020-12-21 12:06

    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);
    }
    
    0 讨论(0)
  • 2020-12-21 12:12

    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
    
    0 讨论(0)
  • 2020-12-21 12:13

    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
    
    0 讨论(0)
提交回复
热议问题