php - MySql 如果条件匹配则选择值,如果不匹配则选择第一个

标签 php mysql sql

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

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

这是我的电话 table :

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 中。

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

关于php - MySql 如果条件匹配则选择值,如果不匹配则选择第一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44615204/

相关文章:

php - 解决 UTF8 和法语口音不兼容问题

SQL:如何选择员工的时间范围并按时间间隔30分钟分组

sql - "exact fetch returns more than requested number of rows"

phpMyAdmin - 如何将 mp3 文件保存在数据库中?

php - 如何执行外部程序,将数据发送到 STDIN 并捕获 STDOUT?

mysql - 替换mysql中的最后一行文本

php - 如何在codeigniter中使用模态上传图像并插入数据库

mysql - 如何获取table1的所有列和table2的属于table1的所有行?

php - .htaccess 允许扩展名、不允许扩展名、允许尾部斜杠

java - 连接超时 : connect JAVA and Wampserver