使用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