Лучший способ сохранить конфигурацию в MySQL - PullRequest
0 голосов
/ 01 марта 2019

У меня есть сценарий, в котором мне нужно хранить конфигурации в таблице mysql, имеющей три столбца, а именно: VendorID , ServiceID и ModeID .Конфигурирование для поставщика может быть выполнено с тремя основными вариантами следующим образом.

  1. Один столбец VendorID со значением, отличным от NULL, с ServiceID, ModeID со значением NULL.

VendorID, ServiceID, ModeID -> 1, NULL, NULL

Два столбца VendorID, ServiceID, имеющий ненулевые значения, с ModeID, имеющим значение NULL.

VendorID, ServiceID, ModeID -> 1,1, 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 передаются, затем case 2 переопределяет case 1.

Если case 3 и case 2 не определены, а case 1 определен и в запросе MySQL WHERE передаются предложения vendorid, servideid и modeid, тогдавозвращается случай 1.

Теперь мой вопрос: как я могу запросить таблицу, чтобы получить конфигурацию, возвращаемую, когда vendorid, servideid и modeid передаются в запросе за один раз, без необходимости запроса 3 раза отдельно.

Любой другой хороший подход к вышеуказанной проблеме также приветствуется.

1 Ответ

0 голосов
/ 01 марта 2019

Вы можете захотеть это:

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;

Это возвращает одну строку с лучшим соответствием.

...