【问题标题】:PHP/MySQL Select all rows from table and display the column value with lowest valuePHP/MySQL 从表中选择所有行并显示最低值的列值
【发布时间】:2013-08-19 12:29:51
【问题描述】:

我正在尝试运行 SQL 查询以从表中选择所有行,然后显示每行具有最低值的列。

例如,让我们从第 1 行开始...

columns1, column2, column3, column4

该行的最小值在column3 中,所以我需要回显column3 值,然后在row2 上,column4 具有最低值,因此应该为该行显示column4

我确实尝试过这段代码:

$sql="SELECT * from callplanmeta ";
$rs=mysql_query($sql,$conn) or die(mysql_error());
while($result=mysql_fetch_array($rs))
{
    $sql2="SELECT *, MIN(NULLIF(".$result["callplanname"].",0)) as number2 from callplandata ";
    echo $sql2;
    $rs2=mysql_query($sql2,$conn) or die(mysql_error());
    while($result2=mysql_fetch_array($rs2))
    {
        echo $result2["description"].' - '.number_format($result2["number2"],2).'<br><br>';
    }
}

然后我意识到它的做法是错误的,只显示了 1 行的最低值

callplandata 表中的列名与callplanmeta 表中的callplanname 列匹配

callplandata 表中的列是动态的,因此它们一直在变化,并且不断添加更多列

【问题讨论】:

  • 我想说,如果您正在向表中动态添加列,则需要考虑对该表进行规范化,并将这些列作为多对多连接表上的行值。跨度>

标签: php mysql


【解决方案1】:

你也可以用这个得到结果

选择 ID, CASE WHEN COLUMN1

您可以获得任意数量的列的结果。

【讨论】:

  • 查看我的编辑:callplandata 表中的列是动态的,因此它们一直在变化,并且不断添加更多内容
【解决方案2】:

首先你会使用这个

SELECT 
        GROUP_CONCAT(COLUMN_NAME)
FROM 
        INFORMATION_SCHEMA.COLUMNS
WHERE 
        table_name = 'mytable'
AND 
        ORDINAL_POSITION>2

要检索所有列,在 PHP 中将其形成为字符串,然后运行以下 (col1,col2,col3) 需要替换为您可以使用上一个查询形成的 column_name 字符串。

添加了 PHP 代码

从你的代码中我明白了两件事,首先你不需要一个 while 循环来处理第一个查询,因为它只会返回一条记录,你需要一个 while 循环来处理第二个查询,因为它会返回多行,让我尝试相应地编写代码

<?php 

$field_string= $mysqli->query("SELECT GROUP_CONCAT(COLUMN_NAME) AS field_string
               FROM INFORMATION_SCHEMA.COLUMNS
               WHERE table_name = `callplandata`
               AND ORDINAL_POSITION>2")->fetch_object()->field_string;

(上面的 >2 表示这将忽略前两列,在您的情况下似乎是数字、描述。如果您有更多或更少的字段要忽略,那么您可以相应地修改此数字)

然后您可以将此 field_string 值用于需要找到最少的其他查询

$sql2="SELECT LEAST(".$field_string.") AS number FROM `callplandata`"; 

$rs2=mysql_query($sql2,$conn); 

while($result2=mysql_fetch_array($rs2)) 
{ 
   echo $result2["number"].'<br>'; 
} 
?>

这将为您提供除所有行的前两列之外的所有列中的最低值,并将其显示在屏幕上。我不是PHP程序员,所以只是用PHP编写代码,可能会有一些小错误。

【讨论】:

  • 查看我的编辑:callplandata 表中的列是动态的,因此它们一直在变化,并且不断添加更多内容
  • 所以你说你想要一个表中所有列的最小值?
  • 对不起,如果我不明白,这是否意味着您的问题得到了回答,或者我只是明白了这个问题:)
  • 我们是否在另一个问题中处理过这个问题?我认为您需要在两者之间正确使用 PHP 才能使其正常工作...
  • 我已经复制并粘贴了其他问题的答案,我将其标记为重复
【解决方案3】:

你可以用这个方法解决这个难题:

SELECT

(SELECT columns1 from myTable) as myField

UNION 
(SELECT column2 from myTable)

UNION 
(SELECT column3 from myTable)

order by myField ASC LIMIT 1

【讨论】:

    猜你喜欢
    • 2014-02-26
    • 2021-12-05
    • 1970-01-01
    • 2015-01-27
    • 2014-03-24
    • 2012-03-16
    • 1970-01-01
    • 2018-08-14
    • 1970-01-01
    相关资源
    最近更新 更多