如何确定使用 mysql_query 从 mysql_fetch_array 获取数据的动态变量中的重复值?
how to determine duplicate values in a dynamic variable which is getting data from mysql_fetch_array with a mysql_query?
我使用来自 mysql_query 的 php 脚本以 html 格式显示数据。
为了制作查询语句,我有一个名为 'questionnaire' 的通讯员 table,它有 6 个名为 'id'、'town'、'zip'、'ans1', 'ans2', 'ans3'.
我的 php 脚本正在从 html 表单中获取这 2 个字段的数据 - 邮编和城镇,代码如下 -
$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 的多个记录,那么我需要检测它并且必须显示 'ans1'、'ans2' 和 'ans3' 列的平均结果对于我生成的单行中的单个 zip html table.
例如-
------------------------------------------------
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
------------------------------------------------
但我打算将结果 table 显示为-
------------------------------------------------
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
但没有一个适合我的情况。我真的需要建议或至少提示如何实现我的目标。
您应该在 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
不要在 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
这将为您提供不同的拉链,以及每个答案的平均值。
我使用来自 mysql_query 的 php 脚本以 html 格式显示数据。
为了制作查询语句,我有一个名为 'questionnaire' 的通讯员 table,它有 6 个名为 'id'、'town'、'zip'、'ans1', 'ans2', 'ans3'.
我的 php 脚本正在从 html 表单中获取这 2 个字段的数据 - 邮编和城镇,代码如下 -
$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 的多个记录,那么我需要检测它并且必须显示 'ans1'、'ans2' 和 'ans3' 列的平均结果对于我生成的单行中的单个 zip html table.
例如-
------------------------------------------------
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
------------------------------------------------
但我打算将结果 table 显示为-
------------------------------------------------
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
但没有一个适合我的情况。我真的需要建议或至少提示如何实现我的目标。
您应该在 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
不要在 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
这将为您提供不同的拉链,以及每个答案的平均值。