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
注意:不使用联合查询您希望在表上使用左外部联接,然后如果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
展开要捕获的任何其他字段的返回集