【问题标题】:How do I output all rows of MySQL table and include a column for counting duplicates?如何输出 MySQL 表的所有行并包含用于计算重复项的列?
【发布时间】:2012-12-10 10:15:22
【问题描述】:

我发现了与删除重复项和计数重复项相关的问题,但我无法将重复项计数添加到 MySQL 行,所以我提出了这个问题。到目前为止,这是我所拥有的:

$query = "SELECT * FROM Losers ORDER BY Date DESC"; 
$result = mysql_query($query) or die(mysql_error());
echo '<table>';
while($row = mysql_fetch_array($result)){
    echo '<tr><td>' . $row['Name']. "</td><td>". date("l, M j, Y",strtotime($row['Date'])) . '</td></tr>';
}
echo '</table>';
mysql_close($con);

现在我想在每行的名称中包含重复的计数。所以,它会是这样的:

Ben 2
Laura 3
Amy 1
Laura 3
Ben 2
Laura 3

我找到了一个这个查询来对名称中的重复项进行分组并计算它们:

$newQuery = "SELECT Name, Date, COUNT(Name) FROM Losers GROUP BY Name"; 

然后它会输出:

Ben 2
Laura 3
Amy 1

如何合并这两个查询?

【问题讨论】:

    标签: php mysql duplicates


    【解决方案1】:

    Afaik,如果没有子查询,您将无法做到这一点:

    SELECT Losers.*, (SELECT COUNT(*) FROM Losers AS Sub WHERE Sub.Name = Losers.Name) AS `count` FROM Losers ORDER BY Date DESC
    

    但就个人而言,我宁愿使用两个单独的查询来代替。

    编辑:请看下面的两个答案,它们好多了。

    【讨论】:

    • 这会随着Losers 表中的条目而呈指数级增长。
    • 不是吹牛,但我的答案或 Basti 的更好,因为子查询只会运行一次 ;)
    • 你是对的。事实上,我什至不知道 JOIN (SELECT...) 是一个有效的语句。愚蠢的我)
    【解决方案2】:
    SELECT Losers.Name, Losers.Date, L.Count
    FROM Losers
    JOIN (
        SELECT Name, COUNT( Name ) AS Count
        FROM Losers
        GROUP BY Name
    ) AS L ON Losers.Name = L.Name
    

    【讨论】:

      【解决方案3】:

      最简单的方法可能是使用 GROUP BY 子句进行查询,并将其用作连接到原始表的子查询。

      I.E.

      SELECT L.*, Loser_Count.count
      FROM Losers L
      JOIN (SELECT loser_id, COUNT(Name) count FROM Losers GROUP BY Name) Loser_Count ON
        L.loser_id = Loser_Count.loser_id 
      ORDER BY L.date DESC
      

      这应该可行,但如果 SQL 天才以更有效的方式回来,我不会感到惊讶。希望这会有所帮助!

      【讨论】:

        【解决方案4】:

        我会在两个单独的查询中完成:

        SELECT Name, COUNT(*) FROM Losers GROUP BY Name
        /* Parse this to have a php array $l_count in form ("Ben" => 2, "Laura" => 3) */
        SELECT Name FROM Losers
        
        while ($name = mysql_fetch...) {
            print $name.' '.$l_count[$name]."\n";
        }
        

        祝你好运!

        【讨论】:

          【解决方案5】:

          使用 SQL

          SELECT field 1, field 2, field 3, COUNT(*)
          FROM table
          GROUP BY field 1, field 2, field 3
          

          该 SQL 将为您提供所有不同的行,以及它们出现 # 次的输出

          【讨论】:

          • 这正是他做过和不想拥有的。
          猜你喜欢
          • 1970-01-01
          • 2011-03-02
          • 1970-01-01
          • 2021-05-25
          • 2013-01-04
          • 1970-01-01
          • 1970-01-01
          • 2023-01-22
          • 2013-03-19
          相关资源
          最近更新 更多