0

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

所以每个成员的推荐都由他们的 id 标记。所以在示例中 test2 是 orig 的 ref。因此,每个人的 ref 都由他们的 id 标记。

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>';
4

1 回答 1

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

于 2013-09-13T20:41:31.973 回答