MySQL 查询用于使用 HTML 表单复选框检索记录

标签 mysql sql coldfusion

各位,我对以下内容有点困惑。

我有一个带有复选框的 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/

相关文章:

mysql - 生成 MySQL 插入并更改列名称

mysql - 避免查询中出现重复并将所有重复行设为空白

mysql - 第一个表中的所有行都与第二个表连接

actionscript-3 - 使用BlazeDS和AS3的URLLoader将AMF作为REST格式

caching - 如何防止单击后退按钮后表单字段重新填充?

sql-server - 查询的coldfusion查询中是否有左连接?

php - 使用带有键的数组作为数组键

mysql - 如何修复此 LEFT JOIN 查询?

sql - Presto - 每天计算 TP90

sql - Mysql如何避免重蹈覆辙