Оператор выбора MySQL с использованием значений массива

У меня есть поле в моей базе данных под названием populations_served. Он может содержать до четырех значений: «Взрослый», «Подростковый», «Детский» или «Гериатрический». Например:

ROW1: взрослые

ROW2: гериатрический

ROW3: взрослые, дети

Моя форма поиска имеет флажки для этих параметров:

<input name="populations[]" type="checkbox" id="populations[]" value="Adults" />
<input name="populations[]" type="checkbox" id="populations[]" value="Adolescents" />
<input name="populations[]" type="checkbox" id="populations[]" value="Children" />
<input name="populations[]" type="checkbox" id="populations[]" value="Geriatric" />

Я хочу, чтобы мой оператор select нашел любую строку, содержащую то, что я проверил. Если я проверю Adult, то ROW1 и ROW3 будут результатом. То же самое с детьми. Если я нажму только Geriatric, результатом будет ROW2. Вот то, что я придумал, но это не работает:

$populations = implode("', '",$_POST["populations"]);
$SQL2 = "SELECT * FROM membership WHERE populations_served IN ('$populations');";

Это приводит к:

SELECT * FROM membership WHERE populations_served IN ('Adults', 'Children');

Но возвращается только ROW1, а не ROW1 & ROW3. Если я выберу все флажки, то будут возвращены строки, имеющие только гериатрические значения. Я не могу понять результаты!

Вот как выглядит база данных:

+---------+--------+----------------------+
| f_name  | l_name | populations_served   |
+---------+--------+----------------------+
| Anamika | Pandit | Adults               |
| Mary    | Anchor | Geriatric            |
| Roger   | Lewis  | Adults, Children     |
| Danny   | Gibson | Geriatric            |
+---------+--------+----------------------+

0

Решение

Вам нужно использовать регулярное выражение:

select *
from (
select 'Adults' as name union all
select 'Geriatric' union all
select 'Adults, Children'
) t
where name regexp 'Adults|Children'

SQLFiddle

0

Другие решения

Строка 3 не возвращается, потому что «Взрослые, дети» не являются «взрослыми» или «детьми».
populations_served атрибут является строкой, а не SET, как вы определяете на IN пункт.

Может быть, стоит взглянуть на MySQL SET тип а также Функция FIND_IN_SET

0

По вопросам рекламы [email protected]