简体   繁体   中英

Select data from one table, arrange by a sum of data from another

A client is looking for a points system to be implemented on her website, I'm struggling to display the users based upon the amount of points collected, I hope somebody may be able to help me out here and point me in the right direction to getting this code to work properly.

I am selecting all data from ap_users and in the code I am also trying to select all data from ap_points although I do not require all the data from either tables, to be specific I only require:

ap_users:
     user_id
     first_name
     last_name
     display_img
     hub_access

ap_points:
     user_id
     points_added

I thought that selecting ALL data may be the easiest route, will let you decide.

I am trying to select and display all users where hub_access = '1' and order by the total points_added by highest first. Points are added separately by rows and need to be added up (which is why I have the sum function).

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

I also tried configuring it to be specific tables like:

ap_users.hub_access and ORDER BY sum(ap_points.points_added) but these did not work either.

This current code is either showing no results or a single result with no errors displaying? I'm not sure whether I may need to use some kind of Group By function to connect the user_ids from both tables ?

SUM is an aggregating function. You should be grouping by user_id if you want the sum for each user_id.

Something like

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;

I have not tested that query, but that should give you an idea of the solution.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM