2017-06-18 124 views
2

我想从MySql数据库中选择一个用户配置文件。我还有另一张包含用户电话的表格,因为他们可以有多个电话。在手机表中,我有一个名为main的字段,表示它是主要联系人。MySql选择值,如果confiting匹配或选择第一个如果不匹配

因此,用户可能有3部手机(甚至更多),但只有1部可以作为主手机。当我选择用户配置文件时,我需要验证是否有任何电话标记为主电话并选择此项。如果没有电话标记为main,那么我从列表中选择第一个。

这是我的电话表:

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

所以在上面的例子中,我需要选择两个用户(23和27),用户23需要有手机88888888888和用户27的需求有电话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; 

换句话说,您需要将p.main加入ORDER BY

此外,我更改了表别名,因此它们是表名的缩写。这使得查询更容易遵循。

+0

这很有趣,它比我更容易。感谢你的回答! – celsomtrindade

相关问题