结果回到每一行

时间:2015-03-01 23:11:45

标签: php mysql

$friendship = mysql_query("SELECT * FROM friends WHERE accountid='$row[id]' && status='approved'") or trigger_error(mysql_error());  
while($joysong2 = mysql_fetch_array($friendship))
{
    $newnot=mysql_query("SELECT * FROM notifyme where userid='$joysong2[friendid]' ORDER BY date DESC, time DESC LIMIT 0,5") or trigger_error(mysql_error());
    while($notify = mysql_fetch_array($newnot))
    {

 }
}

大家好,让我解释一下我在这里要做的事情。

我的$ friendship查询向我们提供了用户已批准与之通信的用户的结果。

因此,结果将以1,3,4,5的形式返回,具体取决于其他用户的用户ID。

第二个查询$ newnot正在使用$ friendship信息并在表notifyme中返回5个条目。

问题是我现在每个用户都得到5个结果。

根据日期/时间顺序通知我,我想要的只有5个结果。

例如

1 posted 1/08/2015
1 posted 2/08/2015
3 posted 1/08/2015
4 posted 2/08/2015
3 posted 3/08/2015

我希望他们回来

3 posted 3/08/2015
4 posted 2/08/2015
1 posted 2/08/2015
3 posted 1/08/2015
1 posted 1/08/2015

现在虽然我的结果会以

的形式回归
1 posted 1/08/2015
1 posted 2/08/2015
1 posted 1/07/2015
1 posted 1/06/2015
1 posted 1/05/2015

3 posted 3/08/2015
3 posted 1/08/2015
3 posted 1/07/2015
3 posted 1/06/2015
3 posted 1/05/2015

我想你明白了我的意思。那么我该如何让它发挥作用呢?

1 个答案:

答案 0 :(得分:0)

我想这会对你有所帮助,但考虑到一些错误,因为我没有对它进行测试。在我们修复之前,欢迎您显示错误。用你使用的名称替换一些列名:

SELECT accountid, status, cnt_rows, `date` FROM friends f

LEFT JOIN (
  SELECT COUNT(*) AS cnt_rows, `date`, f_id FROM notifyme n) AS n_cnt
  ON f.id=n_cnt.f_id
)
GROUP BY n_cnt.date
WHERE status='approved'
OREDER BY `date` DESC
LIMIT 5