簡體   English   中英

使用數組值的MySQL select語句

[英]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'

SQLFiddle

由於“成人,兒童”不是“成人”或“兒童”之一,因此未返回行3。 populations_served屬性是一個字符串,而不是您在IN子句中定義的SET。

也許值得看看MySQL SET類型FIND_IN_SET函數

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM