如何使用PHP计算来自多个MySQL查询的唯一结果?

时间:2011-08-09 00:21:38

标签: php mysql count

我有一个可能是一个简单的问题,但我似乎无法弄清楚如何做到这一点。我正在尝试编写一个查询,计算每个查询的唯一结果数,并将值和查询结果的次数存储到不同的数据库。

以下是我基本上要做的一个例子......

说我有一张桌子'颜色'

+------------+------------+------------+
|     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个查询的所有唯一结果。因为这个查询将使用不同的变量多次运行,所以我想将结果存储在一个数据库中,该数据库可以有一个颜色列和一个总结果列,如上所示。另外,我只是使用表'color'作为示例,并且实际的唯一条目数将是数百个,因此查询必须适用于此。

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

非常感谢任何帮助。

4 个答案:

答案 0 :(得分: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 :(得分:0)

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

答案 2 :(得分:0)

select color, count(id) from color group by color

答案 3 :(得分:0)

我相信你需要2个数据库访问 - 一个用于检索当前总数,另一个用新总数进行更新。