我使用以下MySQL查询为数据库中的用户生成表。该查询旨在为每个用户返回一行,即使每个用户有多行。这样可以正常工作,但是我还需要计算每个用户的唯一条目数,以便进入表格 HERE 的表格。我是否需要使用其他查询来返回所有条目的计数,如果是,我如何将其与我已有的代码集成?
$query="SELECT from_user, COUNT(*) AS num FROM tracks GROUP BY from_user ORDER BY COUNT(*) DESC";
$result=mysql_query($query) or die(mysql_error());
while ($row = mysql_fetch_array($result)) {
$user = $row['from_user'];
echo "<tr>";
echo "<td>".$user."</td>";
echo "<td>uploads (**HERE**)</td>";
echo "<td>favourites (count)</td>";
echo "</tr>";
}
?>
</table>
答案 0 :(得分:1)
因为您已经创建了自定义字段'num',所以您可以使用它来获取计数!
在user = ...
$count = $row['num'];
然后你可以
echo "<td>uploads ($count)</td>";
答案 1 :(得分:0)
它会错过你的表格结构来了解你的字段名称,但是,如果我很好理解你的问题,你可以在mysql中使用count + distinct。 您也可以查看this answer。
SELECT DISTINCT(from_user) AS user,
COUNT(from_user) AS num
FROM tracks
GROUP BY from_user
ORDER BY num DESC";
对于第二个问题,您可以进行第二次查询,或者进行连接跟踪。
我认为,在你的情况下,你更容易在循环中进行第二次查询以获得“用户”结果的所有细节。
$query1="SELECT DISTINCT(from_user), COUNT(*) AS num
FROM tracks
GROUP BY from_user
ORDER BY COUNT(*) DESC";
$query2="SELECT * FROM tracks";
$result1=mysql_query($query1) or die(mysql_error());
$result2=mysql_query($query2) or die(mysql_error());
$user_array = array();
while ($row = mysql_fetch_array($result1)) {
$user = $row['from_user'];
$num = $row['num'];
$uploads_array = array();
while ($sub_row = mysql_fetch_array($result2)) {
if( $sub_row['from_user'] == $user ) {
//for example only due to the unknown structure of your table
$uploads_array[] = array(
"file_name" => $sub_row['file_name'],
"file_url" => $sub_row['file_url']
);
}
}
$user_array[] = array(
"name" => $user,
"num_entry" => $num,
"actions" => $uploads_array
);
}
// now the table with all data is stuctured and you can parse it
foreach($user_array as $result) {
$upload_html_link_arr = array();
$user = $result['name'];
$num_entry = $result['num_entry'];
$all_actions_from_user_array = $result['actions'];
foreach($all_actions_from_user_array as $upload) {
$upload_html_link_arr[] = sprintf('<a href="%s">%s</a>', $upload["file_url"],$upload["file_name"]);
}
$upload_html_link = implode(', ',$upload_html_link_arr);
$full_row = sprintf("<tr><td>%s</td><td>uploads : %s</td><td>favourites (%d)</td></tr>", $user, $upload_html_link, $num_entry);
// now just echo the full row or store it to a table for the final echo.
echo $full_row;
}
我希望这有帮助,迈克