Php 通过单次查询从MYSQL中的2表中获取基于优先级的记录

Php 通过单次查询从MYSQL中的2表中获取基于优先级的记录,php,mysql,Php,Mysql,有两个表具有相同的字段 表格 产品设置 存储\产品\设置 字段列表 产品设置标识 产品编号 设置\u常量\u名称 设置_值 如何首先从“存储\产品\设置”中获取记录,如果在“存储\产品\设置”中找不到记录,则从“产品\设置”表中获取 注意:不使用联合查询您希望在表上使用左外部联接,然后如果store\u product\u settings.setting\u constant\u name中的值为空,请使用product\u settings中的值 就我的例子而言,我假设如下: 1) prod

有两个表具有相同的字段

表格

  • 产品设置
  • 存储\产品\设置
  • 字段列表

  • 产品设置标识

  • 产品编号

  • 设置\u常量\u名称

  • 设置_值

  • 如何首先从“存储\产品\设置”中获取记录,如果在“存储\产品\设置”中找不到记录,则从“产品\设置”表中获取


    注意:不使用联合查询

    您希望在表上使用左外部联接,然后如果store\u product\u settings.setting\u constant\u name中的值为空,请使用product\u settings中的值

    就我的例子而言,我假设如下: 1) product_setting_id是每个表的顺序id,不相关 2) 产品标识和设置常量名称是搜索中使用的两个关键字段(如“我希望为产品Y设置X”) 3) setting_value是希望商店覆盖全局产品的值

    因此,我在表中设置了以下值:

    insert into product_settings (product_setting_id, products_id, setting_constant_name, setting_value) values (1,1,'S1','V1');
    insert into product_settings (product_setting_id, products_id, setting_constant_name, setting_value) values (2,1,'S2','V2');
    insert into product_settings (product_setting_id, products_id, setting_constant_name, setting_value) values (3,2,'S1','V1');
    insert into product_settings (product_setting_id, products_id, setting_constant_name, setting_value) values (4,2,'S2','V2');
    insert into product_settings (product_setting_id, products_id, setting_constant_name, setting_value) values (5,2,'S3','V3');
    
    insert into store_product_settings (product_setting_id, products_id, setting_constant_name, setting_value) values (1,1,'S2','V2A');
    insert into store_product_settings (product_setting_id, products_id, setting_constant_name, setting_value) values (2,2,'S1','V1A');
    insert into store_product_settings (product_setting_id, products_id, setting_constant_name, setting_value) values (3,2,'S3','V3A');
    
    首先,一个简单的左-外连接,显示如何返回所有内容:

    select ps.*, sps.* 
    from product_settings ps
    left outer join store_product_settings sps
      on ps.products_id = sps.products_id
        and ps.setting_constant_name = sps.setting_constant_name
    
    product_setting_id  products_id  setting_constant_name  setting_value  product_setting_id1  products_id1  setting_constant_name1  setting_value1
            1                 1               S1                  V1
            2                 1               S2                  V2              1                   1                 S2                  V2
            3                 2               S1                  V1              2                   2                 S1                  V1
            4                 2               S2                  V2
            5                 2               S3                  V3              3                   2                 S3                  V3
    
    现在,只选择要在存储值上使用ifnull返回常规值的列:

    select ifnull(sps.setting_value,ps.setting_value) as setting_value
    from product_settings ps
      left outer join store_product_settings sps on ps.products_id = sps.products_id
        and ps.setting_constant_name = sps.setting_constant_name
    
    给你这个:

    setting_value
        V1
        V2A
        V1A
        V2
        V3A
    
    展开要捕获的任何其他字段的返回集