0

$userid現在ログインしているユーザーの は、PHP コードで現在使用できるすべてです。mysql テーブルに対してクエリを実行して、自分自身と によって注文された友人のすべてのステータス更新を返したいと考えていますcreateddate DESC

MySQL サンプル データベース テーブル:

[ステータスアップデート]

statusupdateid int(8)  
ownerid int(8)
message varchar(250)
createddate datetime

[友達]

friendid int(8)
requestfrom int(8)
requestto int(8)
daterequested datetime
dateupdated datetime
status varchar(1)

statusupdates.userid質問: eachとstatusupdates.messageorder byを返す単一の文字列クエリを実行できますstatusupdates.createddate DESCか?

または、 がまたはのいずれかにあるfriendsレコードごとにクエリを実行し、代わりのor ( を含まないもの)に対して別のクエリを実行し、すべての結果を並べ替えて、を取得する必要がありますか?$useridfriends.requestfromfriends.requesttofriends.requestfromfriends.requestto$useridstatusupdate.createddatestatusupdates.message

4

2 に答える 2

1

MySQL Joins を見たいと思っています。

これはあなたが求めているようなことをするかもしれないと思いますが、ほぼ間違いなくデバッグが必要になります!

SELECT DISTINCT s.ownerid, s.message 
FROM statusupdates s 
LEFT JOIN friends f ON ($userid = f.requestfrom) 
LEFT JOIN friends f ON ($userid = f.requestto)
ORDER BY s.createddate;
于 2013-07-07T16:44:17.083 に答える
1

これはテストされていませんが、機能するか、少なくとも正しい方向に進むはずです。

サブクエリから s のIN()リストを取得する場所を使用できます。useridそのサブクエリはUNION2 つのクエリで実行します。1 番目はrequestfrom userids を取得し、2 番目は を取得しrequestto useridsます。最後にOR、現在のuserid.

status = 1また、友情を確認していない人からの更新を望まないため、where も除外したいと思います

SELECT s.ownerid, s.message 
FROM statusupdates s 
WHERE s.ownerid IN (
                   SELECT f1.requestfrom
                   FROM friends f1
                   WHERE f1.requestto = $userid
                   AND f1.status = 1

                   UNION

                   SELECT f2.requestto
                   FROM friends f2
                   WHERE f2.requestfrom = $userid
                   AND f2.status = 1
                   )
OR s.ownerid = $userid
ORDER BY s.createddate DESC

この sqlFiddle の例を見てください - http://sqlfiddle.com/#!2/85ea0/3

于 2013-07-07T17:07:13.713 に答える