各位,我对以下内容有点困惑。
我有一个带有复选框的 HTML 表单。
<input type="checkbox" name="colors" value="1"/>1 brown<br>
<input type="checkbox" name="colors" value="2"/>2 blue<br>
<input type="checkbox" name="colors" value="3"/>3 green<br>
<input type="checkbox" name="colors" value="4"/>4 red<br>
<input type="checkbox" name="colors" value="5"/>5 yellow<br>
我有一个 MySQL 表如下:
|id|colorids|
+--+--------+
|1 |4 |
|2 |2 |
|3 |3,1 |
|4 |1 |
|5 |2,3 |
|6 |5 |
colorids TYPE VARCHAR
当我选择“1 Brown”框时,我应该得到结果 id 4,这没问题。或者框'1棕色'和'5黄色',我得到id 4和id 6,也没有问题。
但是当我选择框“2 蓝色”、“3 绿色”和“5 黄色”时,我希望得到结果:id 2、id 3、id 5、id 6
现在我不知道该怎么做。
如果 colorids 中只有一个值,则此查询可以正常工作。
<cfquery name="qGetColors" datasource="#application.dsn#">
SELECT *
FROM
colors
WHERE
colorids IN (#form.colors#);
</cfquery>
当我选择了多个框并且 de colorids 列中有多个值时,我应该使用什么查询来获取我想要的结果?
我需要使用“find_in_set”吗?如果是这样,查询将如何使用表单列表“颜色”?
非常感谢您的帮助或指导。我正在使用 Coldfusion,但查询是问题所在。
最佳答案
正如 @Matt Busche 所说,你想要另一张 table ,像这样;
|id|other_id|colorids|
+--+--------+--------+
|1 |1 |4
|2 |2 |2
|3 |3 |3
|4 |3 |1
|5 |4 |1
|6 |5 |2
|7 |5 |3
|8 |6 |5
那么你就可以轻松select other_id where colourids IN (<CFQUERYPARAM VALUE="#form.colors#" CFSQLTYPE="CF_SQL_INTEGER" LIST="YES">)
将 other_id 链接到原始表中的您的 ID
cfqueryparam 有助于防止 SQL 注入(inject)
关于MySQL 查询用于使用 HTML 表单复选框检索记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38186999/