0

hello imは、最初にuidの友達がデータベースからフェッチされ、それに応じて通知がデータベースからフェッチされるクエリを作成しました。問題は、ユーザーaの2人の友人、ユーザー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を使用してタイムスタンプで戻り構造を並べ替えるか、1つのクエリを使用してすべての通知をフェッチします。

select * from Notification where title_text ='Global Notification'
and user_id = $ id or user_id in(select friend_id from friend_list where uid = $ id and status = '1')and owner_user_id in(select friend_id from friend_list where uid = $ id and status = '1')およびis_seen = 0time_stampDESC
による順序

ネストされたクエリが繰り返されるため、私はあまり好きではありませんが。

追加の質問:

  • クエリでの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 に答える