【问题标题】:Select data from one table, arrange by a sum of data from another从一个表中选择数据,按另一个表中的数据总和排列
【发布时间】:2015-12-21 22:22:49
【问题描述】:

一位客户正在寻找要在她的网站上实施的积分系统,我正在努力根据收集的积分数量来显示用户,我希望有人可以在这里帮助我并指出我使此代码正常工作的正确方向。

我正在从ap_users 中选择所有数据,并且在代码中我也试图从ap_points 中选择所有数据,尽管我不需要任何一个表中的所有数据,具体来说我只需要:

ap_users:
     user_id
     first_name
     last_name
     display_img
     hub_access

ap_points:
     user_id
     points_added

我认为选择所有数据可能是最简单的方法,让您决定。

我正在尝试选择并显示hub_access = '1' 的所有用户,并按points_added 的总数排序,首先是最高的。点是按行单独加的,需要加起来(这就是我有sum函数的原因)。

$sql = "SELECT * FROM `ap_users`, `ap_points` WHERE `hub_access` = '1' ORDER BY sum(points_added) DESC";

我还尝试将其配置为特定的表,例如:

ap_users.hub_accessORDER BY sum(ap_points.points_added) 但这些也不起作用。

当前的代码要么没有显示结果,要么没有显示错误的单个结果?我不确定是否需要使用某种 Group By 函数来连接两个表中的 user_ids ?

【问题讨论】:

  • 这些表中有记录吗? select a.user_id,a.first_name,a.last_name,a.display_img,sum(b.points_added) total_points from ap_users a,ap_points b 其中 a.hub_access=1 group by a.user_id order by sum(b.points_added)
  • 是的,表中有记录,如果我将 SQL 编辑为简单,它确实会显示记录,只有当我尝试订购它们时。你在哪里有sum(b.points_added) total_points 应该是这样还是应该是sum(b.points_added) as total_points
  • 用'as'试试。我对mysql语法不熟悉。
  • 它正在工作,并显示结果,尽管它正在计算系统中的所有积分,而不是按user_id 对它们进行分组,因此所有用户都有相同数量的积分。

标签: php select mysqli sum


【解决方案1】:

SUM 是一个聚合函数。如果你想要每个 user_id 的总和,你应该按 user_id 分组。

有点像

SELECT *, sum(points_added) as sum_points FROM app_users 
JOIN app_points ON app_users.user_id = app_points.user_id
WHERE `hub_access` = '1' 
GROUP BY app_users.user_id
ORDER BY sum_points;

我没有测试过该查询,但这应该可以让您了解解决方案。

【讨论】:

  • 第一次工作没有任何问题。先生,您是救生员!非常感谢您的帮助并提供有关该主题的更多知识。
猜你喜欢
  • 1970-01-01
  • 2021-12-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-20
  • 1970-01-01
  • 2012-02-12
  • 2022-10-18
相关资源
最近更新 更多