如果匹配匹配,则选择MySql值;如果不匹配,则选择第一个

时间:2017-06-18 12:55:28

标签: php mysql sql

我正在尝试从MySql数据库中选择用户配置文件。我还有另一个包含用户电话的表,因为他们可以拥有多部电话。在电话表中,我有一个名为main的字段,表示它是主要联系人。

因此,用户可能有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

1 个答案:

答案 0 :(得分: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

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