选择Count,然后选择Order By

时间:2013-09-13 20:35:46

标签: mysql

我在尝试找到推荐人最多的成员时遇到了一些问题。我一直在寻找东西并尝试超过3个小时的东西,所以这是我的最后一招。我的目标是列出会员用户名和他们推荐的推荐数量。

因此每个成员推荐都标有他们的ID .. 所以在示例中test2是orig的ref。因此,每个人参考都标有他们的身份。

id | username  | ref
1  | orig      |0 (for none) 
2  | test2     |1 (orig id)
3  | another   |1 (orig id)

目标是回应这一点。如果可能的话。

UserName |  Refs
test        1
test2       0

我的尝试。它给了我数量,但它没有对它们进行排序和回声。

$result = mysql_query("SELECT * FROM members");
echo '<table class="table table-bordered"><tr><th>Credits</th><th>Username</th></tr>';
while($row = mysql_fetch_array($result))
  {
  $contest_id = $row['id'];

  $result1 = mysql_query("SELECT COUNT(*) FROM members WHERE ref=".$row['id']."");  
  while($row1=mysql_fetch_array($result1))  
  {  

  $result_c = mysql_query("SELECT * FROM members ORDER BY ".$row1['COUNT(*)']."+0 DESC Limit 10");
  while($row_c = mysql_fetch_array($result_c))
  {
  $top_id = $row_c['id'];
  $find_c = mysql_query("select count(*) from members where user_id='$top_id'");
  $found_c =  mysql_result($find_c,0);
  echo '<tr><td>';
  echo $found_c;
  echo '</td>';
  echo '<td>';
  echo $row_c['username'];
  echo '</td>';
  echo '</tr>';
  }}}
echo '</table>';

1 个答案:

答案 0 :(得分:0)

如果我理解你的桌子布局正确,这应该可以解决问题。

SELECT t1.username, t2.numref
FROM members t1
LEFT JOIN (SELECT ref, COUNT(ref) as numref
           FROM members
           GROUP BY ref) t2
ON t2.ref = t1.id
ORDER BY numref DESC

对于尚未进行任何推介的用户,它应在NULL列中提供numref值。

作为参考,我添加了SQL-Fiddle