从传递“”,0或1的html表单创建SQL IN(0,1)

时间:2018-03-21 01:48:43

标签: sql html-form sql-in mysql-if

我觉得自己是一个失败者,但我会感谢帮助解决一个我无法弄清楚的基本问题(正确)。 HTML表单的选择字段包含:

<select name="hp">
    <option hidden value=""> -- select -- </option>
    <option value="0">No</option>
    <option value="1">Yes</option>
</select>

空白,0或1然后作为变量$ hp

传递给PHP

在SQL查询中,当用户未在表单上选择“否”或“是”时,我无法弄清WHERE子句中为实例生成table.field IN(0,1)的部分。我试过了十个变量IF(例如,table.field IN(IF($ hp ='','0,1',$ hp))和table.field IN(IF($ hp ='','( 0,1)',$ hp)))但没有一个有效。将$ hp定义为0或1的各种迭代都有效但我需要第三个实例,其中应检索0和1记录。

如果我将表单更改为:

,我可以使用它
<select name="hp">
    <option hidden value="0,1"> -- select -- </option>
    <option value="0">No</option>
    <option value="1">Yes</option>
</select>

但是当我相信我应该能够通过SQL端的IF获得'0','1'或两者(或任何其他值)时,这感觉就像一个黑客。感谢SQL 101的感觉,我的大脑今天处理不清楚。

1 个答案:

答案 0 :(得分:0)

您可以在mysql中使用CASE(请参阅文档MySQL CASE Syntax

我在这里创建一个MySQL表测试来测试和一些插入,见下文:

CREATE TABLE test (
  id INT,
  hp INT
);
INSERT INTO test (id, hp) VALUES (1, 1);
INSERT INTO test (id, hp) VALUES (2, 0);
INSERT INTO test (id, hp) VALUES (3, 0);
INSERT INTO test (id, hp) VALUES (4, 1);
INSERT INTO test (id, hp) VALUES (5, 0);
INSERT INTO test (id, hp) VALUES (6, 1);
INSERT INTO test (id, hp) VALUES (7, 0);
INSERT INTO test (id, hp) VALUES (8, 1);
INSERT INTO test (id, hp) VALUES (9, 1);
INSERT INTO test (id, hp) VALUES (10, 0);
INSERT INTO test (id, hp) VALUES (11, 0);
INSERT INTO test (id, hp) VALUES (12, 1);

根据我的理解,您希望在hp0 or 1时返回某个表的列表,但是当未使用hp过滤器时,您希望不管{ {1}}字段。这是一种方法,请参阅下面的内容:

hp

您可以在此处试用此代码:MySQLFiddle

我希望这适合你。