MySQL select语句使用数组值

时间:2014-09-23 22:34:41

标签: php mysql arrays select

我的数据库中有一个名为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            |
+---------+--------+----------------------+

2 个答案:

答案 0 :(得分:0)

您需要使用正则表达式:

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

SQLFiddle

答案 1 :(得分:0)

因为“成人,儿童”不是“成人”或“儿童”之一,因此不会返回第3行。 populations_served属性是一个字符串,而不是您在IN子句中定义的SET。

或许值得一看MySQL SET typeFIND_IN_SET function