我的数据库中有一个名为population_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语句找到包含我检查过的内容的任何行。如果我检查成人,那么结果将是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&amp; ROW3。如果我选中所有复选框,则返回仅具有Geriatric的行。我无法理解结果!
以下是数据库的外观:
+---------+--------+----------------------+
| f_name | l_name | populations_served |
+---------+--------+----------------------+
| Anamika | Pandit | Adults |
| Mary | Anchor | Geriatric |
| Roger | Lewis | Adults, Children |
| Danny | Gibson | Geriatric |
+---------+--------+----------------------+
答案 0 :(得分:0)
您需要使用正则表达式:
select *
from (
select 'Adults' as name union all
select 'Geriatric' union all
select 'Adults, Children'
) t
where name regexp 'Adults|Children'
答案 1 :(得分:0)
因为“成人,儿童”不是“成人”或“儿童”之一,因此不会返回第3行。
populations_served
属性是一个字符串,而不是您在IN
子句中定义的SET。