2017-03-06 6 views
1

私はデータベースのテーブルfriendsを、added_by,added_whoおよびadded_timeという3つのカラムで持っています。PHP SQLクエリの適切な構文

私のようなクエリを使用して、特定のユーザーの友人を返すようにしようとPHPスクリプトで

それはに応じて added_byまたは added_who列のいずれかであるかもしれないので、私は友人のユーザIDをつかむにはどうすればよい
SELECT * 
FROM friends 
WHERE added_by = '$specific_user_id' 
OR added_who = '$specific_user_id'; 

誰が最初に誰を追加したかadded_who == $specific_user_idかどうかをチェックするような長い道のり方を知っています。それが真実ならば、友人のIDはadded_by列にありますが、より速く、より良い方法があるかどうかを知りたいと思います。

+0

は 'added_by'と同様の行ですか作りたい2つのクエリ間の単純な労働組合であります列? – sidyll

+0

おそらくそれは問題ではありませんが、どのSQLデータベースエンジンを使用していますか? MS SQL Server、MySQL、PostgreSQLなど? –

+0

この質問がPHPと関係がある場合、私のヒントは、プレースホルダを挿入し、配列としてデータを渡すことです: '... WHERE added_by =? OR added_who =? ' –

答えて

1

CASEステートメントを使用します。詳細は、CASEのMySQLドキュメントを参照してください。

その適用の一例は次のようになります。

SELECT CASE added_by WHEN '$specific_user_id' THEN added_who ELSE added_by END as friend_id 
FROM friends 
WHERE added_by = '$specific_user_id' 
    OR added_who = '$specific_user_id'; 
0

これには簡単なIF文を使用できます。

SELECT *, IF(added_by = '$specific_user_id', added_who, added_by) AS friend_id 
FROM friends 
WHERE added_by = '$specific_user_id' 
OR added_who = '$specific_user_id'; 
0

は、このクエリを試してみてください、それはあなたが

SELECT added_who FROM friends 
WHERE added_by = '$specific_user_id' 
UNION 
SELECT added_by FROM friends 
WHERE added_who = '$specific_user_id'