使用PHP/MySQL从多个列中选择最小值

使用PHP/MySQL从多个列中选择最小值,php,mysql,Php,Mysql,我有一张桌子,如下所示 ID COL1 COL2 COL3 ---------------- 10 200 n/a 125 11 150 130 n/a 12 100 300 200 13 500 n/a n/a 除ID之外,所有列都是文本 使用PHP和MySQL,我需要从COL1、COL2、COL3中选择最小的“数字”,在这种情况下,它将是100(从第12行,COL1) 我试过这个: $query = ("SELECT MIN(LEAST(COL1,COL2,COL3)) F

我有一张桌子,如下所示

ID COL1 COL2 COL3
----------------
10 200  n/a  125
11 150  130  n/a
12 100  300  200
13 500  n/a  n/a
除ID之外,所有列都是文本

使用PHP和MySQL,我需要从COL1、COL2、COL3中选择最小的“数字”,在这种情况下,它将是100(从第12行,COL1)

我试过这个:

$query = ("SELECT MIN(LEAST(COL1,COL2,COL3)) FROM rug AS 'query1'");
但我认为MIN(至少是AS'query1'部分有问题。我得到了一个警告:

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

有什么想法吗?谢谢!

我发现了两个错误

1.SQL

您的查询适用于您的特定示例,但请尝试在
COL2
COL3
中使用较小的数字,然后您会发现它没有提供您要查找的结果

请尝试以下方法:

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

为了在php中使用mysql查询,请说明如何将其存档,您的示例不是如何完成的。如果您的查询字符串存储在
$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);
}
我无法得到最小值(min)(返回任何结果,这不是我想要的方式,但我最终在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
$query=(“从rug中选择最少的(COL1,COL2,COL3),其中COL1!=''和COL2!=''以及COL3!='');
$result=mysql\u query($query);
如果(!$result){
die('无效查询:'.mysql_error());
}
$num=mysql\u numrows($result);
$i=0;
而($i<$num)
{
$pricing[$i]=mysql\u结果($result,$i);
$i++;
}
排序(定价);
$looster_price=$pricing[0];//最低价格

我怀疑使用
最小值将导致表扫描。您可能希望手动将其分解(显然,我希望索引出现在
COL1
COL2
COL3
上):


错误消息不是来自该行。它来自您使用的
mysql\u numrows()所在的行
。请显示您拥有的完整代码。请使用
mysql\u numrows
显示代码。指出您试图将
mysql\u numrows
与非sql查询结果对象一起使用的错误非常具有描述性。使用“AS”然后分配字符串值会引发语法错误。请尝试
SELECT MIN(最小值(COL1、COL2、COL3))来自rug AS query1
。错误msg似乎在抛出numrows,因为它试图从结果中获取行数,但结果无效。错误在查询中。如果我在表上运行查询,它返回零结果。那么,它适用于我的测试环境。请提供有关表结构的更多详细信息以进一步了解对此进行分析。在我需要多个表中的列之间的最小值的情况下,如果没有匹配的记录,这种方法会更好。这种解决方案避免了丑陋和低效的完全外部联接。
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