MySql选择值,如果confiting匹配或选择第一个如果不匹配
问题描述:
我想从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
答
您的查询接近:
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
。
此外,我更改了表别名,因此它们是表名的缩写。这使得查询更容易遵循。
这很有趣,它比我更容易。感谢你的回答! – celsomtrindade