2

to_id特定のメッセージに対して aと a の両方を持つメッセージ テーブルがありfrom_idます。

このクエリに user_id を渡し、指定された user_id との間でメッセージを送受信するユーザーを表す、重複しない ID のリストを返すようにしたいと考えています。

私が今持っているのは(ターゲットuser_idとして12を使用)です:

SELECT from_id, to_id

FROM messages

WHERE 
from_id = 12 
OR 
to_id = 12

これは、そのuser_idが存在するすべてのレコードを返しますが、重複していないレコードのみを返す方法と、12ではないuser_idになる1つのフィールドのみを返す方法がわかりません.

つまり、ユーザー 12 が既存のメッセージ レコードを持つすべてのユーザーの ID を返します。

これについては十分に説明できたと思いますが、まだ学んでいないことは比較的単純であると信じなければなりません。

編集 :

現在の SQL には 2 つのフィールドがありますが、1 つのフィールドだけを返すように指定する必要がありました --- contact_id。また、重複があってはなりません。

contact_id はメッセージ テーブルのフィールドではありませんが、from_id または to_id のどちらを返すかに関係なく、クエリで返してほしいフィールド名です。

4

3 に答える 3

1

ユニオンステートメントを回避するソリューションを次に示します。

SELECT distinct (case when to_id = 12 then from_id else to_id end) as contact_id

FROM messages

WHERE 
   from_id = 12 
OR 
    to_id = 12
于 2013-08-23T19:14:15.010 に答える
1

次を使用できますunion

select
 from_id as contact_id
from messages
where to_id = 12
union
select
 to_id
from messages
where from_id = 12

また、ドキュメントから(強調鉱山):

UNION のデフォルトの動作では、重複する行が結果から削除されます。

if()または、 (または)を使用できますcase

contact_id として個別の
 if(from_id = 12, to_id, from_id)を選択
メッセージから
from_id = 12
または to_id = 12
于 2013-08-23T19:23:57.573 に答える
0

2 つのクエリを UNION する必要があります。

于 2013-08-23T19:17:45.927 に答える