[英]MySQL select statement using array values
我的數據庫中有一個名為人口總數的字段。 它最多可以包含四個值-成人,青少年,兒童或老人。 例如:
ROW1:成人
第2行:老年病
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。 與孩子們一樣。 如果僅單擊“老年醫學”,則結果將為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 |
+---------+--------+----------------------+
您需要使用regexp:
select *
from (
select 'Adults' as name union all
select 'Geriatric' union all
select 'Adults, Children'
) t
where name regexp 'Adults|Children'
由於“成人,兒童”不是“成人”或“兒童”之一,因此未返回行3。 populations_served
屬性是一個字符串,而不是您在IN
子句中定義的SET。
也許值得看看MySQL SET類型和FIND_IN_SET函數
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.