Как выполнить выборку по нескольким столбцам, где значение второго столбца может быть любым - PullRequest
1 голос
/ 19 июня 2019

У меня есть простая база данных MySQL со столбцами для местоположения (скажем, значения Техас, Колорадо и Вирджиния) и зоны (скажем, значения внутренние, внешние и частные).

Я пытаюсь разработать веб-форму PHP, которая позволит мне отображать устройства на основе выбора значений из обоих столбцов, где одним из возможных вариантов является «ВСЕ». Как мне структурировать запрос так, чтобы местоположение имело определенное значение (скажем, Техас), но зона - это все значения. По-английски: Показать устройства в Техасе во всех зонах.

Похоже, что "*" не соответствует ни одному значению, а шаблон регулярного выражения не соответствует всем значениям в столбце зоны. Я отправляю запрос через простую форму PHP, поэтому просто не указывать зону в качестве параметра для SELECT - это не вариант, потому что запрос является статическим в коде PHP и должен учитывать определенное значение (то есть внутреннее), так что Значение можно передать из формы, которая будет представлять ЛЮБУЮ зону.

Я пробовал множество запросов SELECT, но ни один из них не работает с веб-формой, которая позволяет отправлять либо конкретные значения, либо "ВСЕ"

SELECT * FROM device WHERE location LIKE 'texas' AND sw_zone IN (????);

Я ожидаю, что результат будет

| texas | internal |

| texas | external |

| texas | private  |

1 Ответ

0 голосов
/ 19 июня 2019

Здесь можно выбрать два пути. Одним из них является изменение запроса, а другим - написать немного больше кода PHP.

Если вы решите, что хотите изменить запрос, одним из вариантов будет использование подзапроса, чтобы сначала выбрать все зоны. Ваш запрос будет похож на этот, если выбрано «все»:

SELECT * FROM device WHERE location Like 'texas' AND sw_zone IN (SELECT DISTINCT sw_zone FROM device WHERE sw_zone LIKE 'internal')

Internal - это единственное значение, которое вы должны изменить с помощью этого запроса, и оно должно поддерживать символы подстановки. Пример:

SELECT * FROM device WHERE location Like 'texas' AND sw_zone IN (SELECT DISTINCT sw_zone FROM device WHERE sw_zone LIKE '%')
...