Connecting Tech Pros Worldwide Forums | Help | Site Map

MySql PHP, count and group by question pretty tricky

Newbie
 
Join Date: Oct 2007
Posts: 3
#1: 3 Weeks Ago
Hey Guys,

Ok here is my problem:

There is around 350 rows in the db.

All the variables $actor_id, $comment_id and $likes_id are all uid's for facebook users

Now i want to group and sum how many entries there are of each unique uid

Say for example the number:

'65653171' came up
10 times as a $actor_id
5 times as a $comment_id
3 times as a $likes_id

and

'67418530' came up
5 times as a $actor_id
21 times as a $comment_id
3 times as a $likes_id

Then i want a query that would display in order of most entries:
1.) 67418530 (29)
2.) 65653171 (18)


Thanks for the help, real brain teazer for me.


This is the code i use to fetch the Data from the FQL Table, a preview of the FQL Table can been seen on the bottom of this thread.

Expand|Select|Wrap|Line Numbers
  1.  $query = "SELECT post_id, actor_id, comments, likes FROM stream WHERE source_id = ".$user." LIMIT 500";
  2. $result = mysql_query($query);
  3. $count = count($result);
  4. $total=$count;
  5.  
  6.  
  7.  for ($i = 0; $i < $count; $i++)
  8.  {
  9.  
  10.  $actor_id = $result[$i][actor_id];
  11. $count_c  = $result[$i][comments][count];
  12.  
  13. if($count_c > 0){
  14.     for ($a = 0; $a < $count_c; $a++){
  15.           $comment_id = $result[$i][comments][comment_list][$a][fromid];
  16.  
  17.     }
  18. }
  19.  
  20.  
  21. $count_l  = $result[$i][likes][count];
  22.  
  23. if($count_l > 0){        
  24.         for ($b = 0; $b < $count_l; $b++){
  25.             $likes_id = $result[$i][likes][friends][$b];
  26.  
  27.    }        
  28. }
  29.  
  30.  
  31.  
  32.  
  33. }
This is how the information is stored in the DB

Expand|Select|Wrap|Line Numbers
  1. [posts] => Array
  2.  
  3.         (
  4.  
  5.             [0] => Array
  6.  
  7.                 (
  8.  
  9.                     [post_id] => 65653171_199696556137
  10.  
  11.                     [viewer_id] => 65653171
  12.  
  13.                     [source_id] => 65653171
  14.  
  15.                     [type] => 46
  16.  
  17.                     [app_id] => 291512034
  18.  
  19.                     [attribution] => via <a href="/mobile/?v=web">Mobile Web</a>
  20.  
  21.                     [actor_id] => 65653171
  22.  
  23.                     [target_id] => 
  24.  
  25.                     [message] => is just trying to be a nice guy :P stop hating on me.
  26.  
  27.                     [attachment] => 
  28.  
  29.                     [app_data] => 
  30.  
  31.                     [action_links] => 
  32.  
  33.                     [comments] => Array
  34.  
  35.                         (
  36.  
  37.                             [can_remove] => 1
  38.  
  39.                             [can_post] => 1
  40.  
  41.                             [count] => 2
  42.  
  43.                             [comment_list] => Array
  44.  
  45.                                 (
  46.  
  47.                                     [0] => Array
  48.  
  49.                                         (
  50.  
  51.                                             [fromid] => 67418530
  52.  
  53.                                             [time] => 125705944
  54.  
  55.                                             [text] => Y these ppl hating on yu bebe :) miss yu sooo much!!
  56.  
  57.                                             [id] => 65653171_199696556137_6751049
  58.  
  59.                                         )
  60.  
  61.  
  62.  
  63.                                     [1] => Array
  64.  
  65.                                         (
  66.  
  67.                                             [fromid] => 108832181
  68.  
  69.                                             [time] => 1257186632
  70.  
  71.                                             [text] => yo
  72.  
  73.                                             [id] => 65653171_199696556137_6802381
  74.  
  75.                                         )
  76.  
  77.  
  78.  
  79.                                 )
  80.  
  81.  
  82.  
  83.                         )
  84.  
  85.  
  86.  
  87.                     [likes] => Array
  88.  
  89.                         (
  90.  
  91.                             [href] => http://www.facebook.com/social_graph.php?node_id=19966556137&class=LikeManager
  92.  
  93.                             [count] => 4
  94.  
  95.                             [sample] => 
  96.  
  97.                             [friends] => Array
  98.  
  99.                                 (
  100.  
  101.                                     [0] => 58579401
  102.  
  103.                                     [1] => 55125266
  104.  
  105.                                     [2] => 57449386
  106.  
  107.                                     [3] => 60906602
  108.  
  109.                                 )
  110.  
  111.  
  112.  
  113.                             [user_likes] => 0
  114.  
  115.                             [can_like] => 1
  116.  
  117.                         )
  118.  
  119.  
  120.  
  121.                     [privacy] => Array
  122.  
  123.                         (
  124.  
  125.                             [value] => NOT_EVERYONE
  126.  
  127.                         )
  128.  
  129.  
  130.  
  131.                     [updated_time] => 1257186632
  132.  
  133.                     [created_time] => 1257057706
  134.  
  135.                     [tagged_ids] => 
  136.  
  137.                     [is_hidden] => 0
  138.  
  139.                     [filter_key] => 
  140.  
  141.                     [permalink] => http://www.facebook.com/profile.php?id=65653171&v=feed&story_fbid=19969655137
  142.  
  143.                 )
  144.  
  145.  
  146.  
  147.             [1] => Array
  148.  
  149.                 ( .........Next entry same format as top........

TheServant's Avatar
Expert
 
Join Date: Feb 2008
Location: Australia
Posts: 914
#2: 3 Weeks Ago

re: MySql PHP, count and group by question pretty tricky


I am assuming that it will grow beyond 350 rows.

Besides making a rediculous query with lots of filtering you can't do this in one step. It would be way too resource intensive even if you could if it greew to say 10,000 rows.
I suggest this:
Have another column called entry_totalizer or something and then you can ORDER BY that and display that instead of doing a whole lot of COUNTing. Every time a comment_id or actor_id etc is entered, a filter can add one to the entry_totalizer.

With the ones that you already have, you might need to write a simple script to update those already in the table by searching for the empty ones and then doing the math and updating the value for each. If you are worried about resources, LIMIT it to 50 at a time, but I suspect that only having 350 will not be a problem.
Reply