【问题标题】:How to count unique results from multiple MySQL queries using PHP?如何使用 PHP 计算来自多个 MySQL 查询的唯一结果?
【发布时间】:2011-08-10 04:17:21
【问题描述】:

我有一个简单的问题,但我似乎不知道该怎么做。我正在尝试编写一个查询来计算每个查询的唯一结果数,并将值和作为查询结果的次数存储到不同的数据库。

这是我基本上想要做的一个例子......

假设我有一个“颜色”表

+------------+------------+------------+
|     id     |    color   |   letter   |
+------------+------------+------------+
|          1 | blue       |      a     |
|          2 | blue       |      b     |
|          3 | red        |      a     |
|          4 | red        |      b     |
|          5 | green      |      a     |
+------------+------------+------------+

我有一个查询将使用此表运行多次 找到对应的字母和颜色:

$query = ("SELECT * FROM colors WHERE letter = '$someletter'");
$query1 = mysql_query($query);
while($row = mysql_fetch_array($query1)) {
$id = $row['id'];
$color = $row['color'];
};

对于每个查询,我将 $id 和 $color 变量写入单独的日志文件。

例如,使用上面的查询,$someletter = "a"。 (将此查询称为#1) 结果将是:

+------------+------------+------------+
|     id     |    color   |   letter   |
+------------+------------+------------+
|          1 | blue       |      a     |
|          3 | red        |      a     |
|          5 | green      |      a     |
+------------+------------+------------+

蓝色、红色和绿色各有一个结果。

如果使用 $someletter = "b" 运行查询(调用此查询 #2) 结果集将是:

+------------+------------+------------+
|     id     |    color   |   letter   |
+------------+------------+------------+
|          2 | blue       |      b     |
|          4 | red        |      b     |
+------------+------------+------------+

蓝色和红色各有一个结果。

所以查询 #1 和 #2 的结果总数:

+------------+------------+------------+
|     id     |    color   | totalresult|
+------------+------------+------------+
|          1 | blue       |      2     |
|          3 | red        |      2     |
|          5 | green      |      1     |
+------------+------------+------------+

基本上,我想找到一种方法来计算 X 个查询的所有唯一结果。因为此查询将使用不同的变量多次运行,所以我想将结果存储在一个数据库中,该数据库可能有一个颜色列和一个总结果列,如上所示。另外,我只是使用表“颜色”作为示例,唯一条目的实际数量将是数百个,因此查询必须为此工作。

我正在考虑某种形式的 COUNT 或 GROUP,但我似乎无法连接这些点。

任何帮助将不胜感激。

【问题讨论】:

    标签: php mysql count


    【解决方案1】:
    $query = 'SELECT color, COUNT(letter) totalresult FROM colors GROUP BY color';
    

    这应该会给你颜色和它出现的次数(每种颜色)。我省略了id 列,因为你不能将一行映射到一个id,这样信息就没有用了。

    更新

    为了存储搜索结果,您可以创建两个表。第一个 (search_query) 只需要包含一个 id 和一个 varchar 列来保存查询。您还可以添加时间戳以了解人们何时使用搜索选项。

    第二个表 (search_results) 每行包含一个结果。它由第一个表的外键和结果组成。您还可以记录结果行的 ID,而不是完整的结果。 (因此,如果有人搜索字母 b,您只需要记录颜色 id 2 和 4。这意味着您需要 search_results 表中的两行。)

    如果搜索结果可能来自多个表格,您还需要将表格名称添加到搜索结果表格中。我会为此使用一个 varchar 列。

    【讨论】:

    • 谢谢,但我正在尝试找出查询以创建包含总结果列的表。我想了解如何将唯一结果查询 1 和 2 编译到数据库中。一旦我有了那个数据库,我就知道如何提取计数,我只是无法制作表格。
    • 你不能只创建另一个名为 QueryResults 的表,并且每次运行查询时,用行填充该表。如果您添加一个时间戳列也会有所帮助,这样您以后就可以知道何时运行产生结果的查询。
    【解决方案2】:

    您要使用的是mysql_num_rows($query1);,它会返回结果中的行数。

    【讨论】:

      【解决方案3】:
      select color, count(id) from color group by color
      

      【讨论】:

        【解决方案4】:

        我相信您将需要 2 次数据库访问 - 一次检索当前总数,一次使用新总数更新它。

        【讨论】:

          猜你喜欢
          • 2013-02-04
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-10-05
          • 1970-01-01
          相关资源
          最近更新 更多