0

你好,我做了一个查询,其中首先从数据库中获取 uid 的朋友,并根据该通知从数据库中获取。问题是假设用户 a 的两个朋友是用户 b 和用户 c,那么他们的通知应该在我这样查询之后出现

用户 b 更新了个人资料

用户 c 评论

用户 b 喜欢

用户 c 评价

这些是根据时间戳排列的

但它的到来安排为每个朋友单独的时间戳

喜欢

用户 b 喜欢

用户 b 更新了个人资料

用户 c 评论

用户 c 评价

我的代码

      $frndnoti=mysql_query("select friend_id from friend_list where uid=$id and status='1'");
while($bow=mysql_fetch_array($frndnoti))
{
$frnnid=$bow['friend_id'];

$sql3=mysql_query("select * from notification 
  where title_text='Global Notification'  
    and user_id in ($id , $frnnid)
   and owner_user_id=$frnnid 
   and is_seen=0  
   order by time_stamp DESC");

while($row=mysql_fetch_array($sql3))
{
      and so on.....

$sql3 的结果可以根据时间戳重新排列吗?在它被取走之后?或者有什么方法可以改进这个查询?

4

3 回答 3

0

经过长时间的思考并尝试我想出了它的仪式查询,我在这里写了查询,以便它可以帮助后来卡住的人

$sql3=mysql_query("select n.*,f.friend_id,f.uid,f.status from notification
n,friend_list f  where f.uid='$id' and f.status='1' and n.title_text='Global 
Notification'   and n.user_id in ('$id' , f.friend_id)  and n.owner_user_id=f.friend_id
 and n.is_seen='0'  order by n.time_stamp desc");

while($row=mysql_fetch_array($sql3))

{
 and so on.....
于 2012-05-31T12:22:44.760 回答
0

可能是因为您正在嵌套查询并将子查询结果按friend_id 插入到数组中。要么使用 php 对时间戳的返回结构进行排序,要么使用一个查询来获取所有通知:

select * from notification where title_text='Global Notification'
and user_id = $id or user_id in (selectfriend_id from friend_list where uid=$id and status='1') and owner_user_id in (selectfriend_id from friend_list where uid=$id and status='1') and is_seen=0
order by time_stamp DESC

尽管由于重复的嵌套查询,我不太喜欢那个。

附加问题:

  • 查询中 user_id 和 owner_user_id 的用途是什么?
  • 通知是如何插入到通知表中的?
  • title_text 的目的是什么?
  • 拉出通知后是否设置了 is_seen 标志?是否再次需要通知?使用队列会更容易。
于 2012-05-31T12:23:12.557 回答
-1

双重检查time_stamp数据类型是时间戳。重命名您的列time_stamp,然后重试。如果这也不起作用,另一种方法是您可以使用 PHP 数组排序函数对数组进行降序排序。

于 2012-05-31T12:02:48.617 回答