2016-09-07 6 views
0

私はここで何を達成しようとしているのかを知るために、ユーザーが着信または発信メールを「スター」することができる非常にシンプルなメールシステムをセットアップしました。我々はのためにスターを付けたメッセージを取得している場合は、上記の例から、2つの列を結合してMySQLから選択しますか?

Random Digit 
User ID of Recipient 
User ID of Sender 
Message 
If recipient has starred message (0 for no, 1 for yes) 
If sender has starred the message (0 for no, 1 for yes) 

mail_id | recip_account | sender_account | message | recip_starred | sender_starred 
    1   5     10    Hello   0     1 
    2   10     5   A Reply   0     1 
    3   10    20    Test   1     0 
    4   15    20    Message  1     1 

:システムは非常にシンプルであり、以下のような表の設計と連携し、私はここでは関係ありませんいくつかの列を削除したことに注意してくださいユーザーID 10の場合、クエリにメッセージIDの1, 3が表示されます。 あなたはうまくいくかもしれません - 受信メッセージまたは送信済みメッセージだけを個別に表示すると、スター付きメッセージを簡単に取り出すことができます。ここで問題となるのは、各ユーザーのすべての「スター付き」メッセージを1つのフォルダに表示することですが、どのユーザーがメッセージにスターを付けているのかを明らかにすることが必要です。それはユーザーIDに対してですか?次のように

誰もがここで私を助けることができ、私は結果を取得しています、現在の方法は次のとおりです。

$sql2 = "SELECT * FROM `ap_mail_system` WHERE `recip_account` = '$user_id' OR `sender_account` = '$user_id' ORDER BY `sent_date` DESC LIMIT 0, 12"; 
+0

'どこですか?recip_starred = 1'ですか? –

+0

私はSENTメッセージまたはRECEIVEDメッセージを別々に表示していてもうまくいきますが、送信済みメッセージと受信済みメッセージの両方が表示されている場合は、 – Snappysites

答えて

1

あなたは自分のWHERE句のブール論理のビットを必要とします。試してください:

SELECT * FROM `ap_mail_system` WHERE (`recip_account` = '$user_id' AND `recip_starred` = 1) OR (`sender_account` = '$user_id' AND `sender_starred` = 1) ORDER BY `sent_date` DESC LIMIT 0, 12 
+0

まさに私が探していたもの、ありがとう! – Snappysites

関連する問題