2017-06-18 17 views
2

MySqlデータベースからユーザープロファイルを選択しようとしています。私はまた、複数の電話を持つことができるので、ユーザーの電話を含む別のテーブルがあります。電話のテーブルでは、連絡先がメインであることを示すmainというフィールドがあります。一致が一致する場合はMySqlの値を選択し、一致しない場合は最初を選択します

したがって、ユーザーは3台の電話機(またはそれ以上)を持つことができますが、メイン電話機は1台のみです。ユーザープロファイルを選択するときに、メインの電話としてマークされている電話があるかどうかを確認し、これを選択する必要があります。 mainと記された電話がない場合は、リストから最初の電話番号を選択します。

これは私の携帯電話のテーブルです:

id | id_user | main | phone 
15 | 23  | 0 | 99999999999 
16 | 23  | 1 | 88888888888 
17 | 27  | 0 | 66666666666 
18 | 27  | 0 | 77777777777 

は、したがって、上記の例では、私が電話88888888888とユーザー27のニーズを持っているために、両方のユーザー(23及び27)を選択するために、ユーザ23ニーズが必要になります電話番号は66666666666です。

しかし、私はこれを達成する方法がわからない、私は最初のレジスタを選択するためのエールだった、これは私のコードは、これまでのところです:

SELECT 
    a.id, a.f_name, a.l_name, a.code, 
    ( 
     SELECT phone FROM tb_phone WHERE id_user = a.id ORDER BY id LIMIT 1 
    ) as 'phone' 
FROM tb_user a 
WHERE a.active = 1 

答えて

3

あなたのクエリが近くにあります:

SELECT u.* 
     (SELECT p.phone 
     FROM tb_phone p 
     WHERE p.id_user = u.id 
     ORDER BY p.main DESC, p.id 
     LIMIT 1 
     ) as phone 
FROM tb_user u 
WHERE u.active = 1; 

つまり、ORDER BYp.mainを追加する必要があります。

さらに、テーブルエイリアスがテーブル名の略語になるように変更しました。これにより、クエリーがはるかに簡単になります。

+0

私はそれより簡単だったのは面白いです。答えをありがとう! – celsomtrindade

関連する問題