【问题标题】:how to determine duplicate values in a dynamic variable which is getting data from mysql_fetch_array with a mysql_query?如何确定使用 mysql_query 从 mysql_fetch_array 获取数据的动态变量中的重复值?
【发布时间】:2015-01-08 18:19:20
【问题描述】:

我正在使用来自 mysql_query 的 php 脚本以 html 格式显示数据。

为了进行查询语句,我有一个名为“questionnaire”的对应表,其中有 6 个名为“id”、“town”、“zip”、“ans1”、“ans2”、“ans3”的列。

我的 php 脚本正在从 html 表单中获取这 2 个字段的数据 - zip 和 town ,代码如下 -

$town = _POST['town'];
$zip = _POST['zip'];

include (dbconnect.php);

$query = mysql_query("select * from questionnair where town = '$town' && zip = '$zip' order by zip");
$data = mysql_fetch_array($query);

现在我将它们展示为-

<html>
 <body>
  <table>
   <tr><th>ZIP</th><th>Ans 1</th><th>Ans 2</th><th>Ans 3</th></tr>
   <? do {
     echo "<tr><td>".$data['zip']."</td><td>".$data['ans1']."</td><td>".$data['ans2']."</td><td>".$data['ans3']."</td></tr>";
     } while ($data = mysql_fetch_array($query));
   ?>
  </table>
 </body>
</html>

直到这一切都很好并且可以正常工作。现在我需要以下步骤的建议和帮助-

如果 zip 列中有单个 zip 的多条记录,那么我需要检测到这一点,并且必须在单行中显示该单个 zip 的“ans1”、“ans2”和“ans3”列的平均结果在我生成的 html 表中。

例如-

------------------------------------------------
  town   |  zip  |  ans1 |  ans2  |  ans3
================================================
   NY    |  107  |   4   |   5    |   2
------------------------------------------------
   NY    |  107  |   1   |   4    |   3
------------------------------------------------
   NY    |  108  |   2   |   2    |   2
------------------------------------------------
   NY    |  109  |   5   |   3    |   1
------------------------------------------------
   NY    |  107  |   2   |   2    |   1
------------------------------------------------
   NY    |  107  |   1   |   4    |   3
------------------------------------------------
   NY    |  112  |   2   |   4    |   5
------------------------------------------------
   NY    |  113  |   5   |   1    |   1
------------------------------------------------
   NY    |  113  |   3   |   3    |   2
------------------------------------------------
   NY    |  113  |   2   |   3    |   4
------------------------------------------------
   NY    |  116  |   5   |   5    |   2
------------------------------------------------

但我打算将结果表显示为-

------------------------------------------------
  town   |  zip  |  ans1 |  ans2  |  ans3
================================================
   NY    |  107  |   2   |  3.75  |  2.25
------------------------------------------------
   NY    |  108  |   2   |   2    |   2
------------------------------------------------
   NY    |  109  |   5   |   3    |   1
------------------------------------------------
   NY    |  112  |   2   |   4    |   5
------------------------------------------------
   NY    |  113  |  3.66 |  2.33  |  2.33
------------------------------------------------
   NY    |  116  |   5   |   5    |   2
------------------------------------------------

我已经尝试过这些帖子- How to detect duplicate values in PHP array?PHP: Check for duplicate values in a multidimensional array

但没有一个适合我的情况。我真的需要建议或至少提示如何实现我的目标。

【问题讨论】:

    标签: php mysql


    【解决方案1】:

    不要在 PHP 中这样做。在 MySQL 中执行此操作效率更高。

    select AVG(ans1) AS ans1, AVG(ans2) AS ans2, AVG(ans3) AS ans3, town, zip
    from questionnair
    where town = '$town' AND zip = '$zip'
    GROUP BY zip
    order by zip
    

    这将为您提供不同的拉链,以及每个答案的平均值。

    【讨论】:

    • 谢谢。工作正常。
    • 没问题,乐于助人。
    【解决方案2】:

    您应该在 mysql 查询中使用 AVG() and GROUP BY 执行此操作

    SELECT id, town, zip, AVG(ans1) as ans1, AVG(ans2) as ans2, AVG(ans3) as ans3
    FROM questionnair
    WHERE town = '$town' && zip = '$zip'
    GROUP BY zip
    ORDER by zip
    

    【讨论】:

      猜你喜欢
      • 2013-12-08
      • 1970-01-01
      • 1970-01-01
      • 2013-11-02
      • 2023-04-10
      • 2014-04-09
      • 2013-09-01
      • 2019-05-26
      • 2017-09-03
      相关资源
      最近更新 更多