我有一个表格设置如下
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之外,所有列都是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
有什么想法?谢谢!
答案 0 :(得分:4)
我发现了两个错误。
<强> 1。 SQL 强>
您的查询适用于您的具体示例,但请尝试在COL2
或COL3
中使用较小的数字,然后您会发现它不会提供您正在寻找的结果。
请改为尝试:
SELECT LEAST(
MIN(COL1),
MIN(COL2),
MIN(COL3)
)
FROM yourtable;
<强> 2。 PHP 强>
为了在php中使用mysql查询,请check the manual了解如何归档,你的例子不是如何完成的。如果您的查询字符串存储在$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);
}
答案 1 :(得分:3)
我怀疑使用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
答案 2 :(得分:0)
我无法得到最少(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