我有一种情况,我需要将配置存储在具有三列(即VendorID,ServiceID和ModeID)的mysql表中。可以使用以下三种主要情况来完成供应商的配置。
一列VendorID具有非NULL值,其中ServiceID,ModeID具有NULL值。
VendorID,ServiceID,ModeID-> 1,NULL,NULL
两列VendorID,ServiceID具有非NULL值,而ModeID具有NULL值。
VendorID,ServiceID,ModeID-> 1,1,NULL
所有三列均具有非NULL值。
VendorID,ServiceID,ModeID-> 1,1,1
当定义了案例1,2,3并在MySQL查询WHERE子句中传递了vendorid,servideid和modeid时,案例3会覆盖案例2和案例1。
如果未定义案例3并定义了案例1,2,并且在MySQL查询WHERE子句中传递了vendorid,servideid和modeid,则案例2会覆盖案例1。
如果未定义案例3和案例2并定义了案例1,并且在MySQL查询WHERE子句vendorid,servideid和modeid中传递,则返回案例1。
现在我的问题是,如何在查询中一次性传递vendorid,servideid和modeid时查询表以获取返回的配置,而不必分别查询3次。
也欢迎任何其他解决上述问题的好方法。
最佳答案
您可能想要这样:
where (VendorID, ServiceID, ModelID) = ($VendorID, $ServiceID, $ModelID) or
( (VendorID, ServiceID) = ($VendorID, $ServiceID) and ModelId is null) or
( VendorID = $VendorID and ServiceID is null and ModelId is null)
或者,您可能想要:
select t.*
from t
where VendorId = $VendorId and
(ServiceId = $ServiceId or ServiceId is null) and
(ModelId = $ModelId or ModelId is null)
order by ( ServiceId is not null ) desc,
( ModelId is not null ) desc
limit 1;
这将返回最匹配的一行。
关于mysql - 在MySQL中存储配置的最佳方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54942582/