请掌握,我有以下输入:
<label >Please choose :</label>
<input type="checkbox" name="outil[]" value="TV" />
<input type="checkbox" name="outil[]" value="Lecteur CD" />
我有一张表“MyValues
”如下:
+----+-----------------------------------------------------------------------+
| id | value |
+----+--------+------------------------------------------------------------- +
| 1 | a:3:{i:0;s:10:"Lecteur CD";i:1;s:16:"Console de salon";i:2;s:2:"TV";} |
+----+--------+--------------------------------------------------------------+
字段值包含从fallowing数组序列化的字符串:
array(3) {
[0]=>
string(10) "Lecteur CD"
[1]=>
string(16) "Console de salon"
[2]=>
string(2) "TV"
}
现在,当用户检查输入时,他希望将数据发送到服务器端,我需要选择 id
,其中value
字段中存在已检查的输入(这是数组中的序列化值 - 如果我可以使用函数in_array那么会很容易)。
我的查询如下:
"SELECT id FROM MyValues WHERE value = '".serialize($_POST['outil'])."' ";
但这不起作用,这是正常的,因为用户只能检查一个输入,他必须找到数据。
我正在考虑在mysql中使用正则表达式,如果它可以检查是否至少有发送的数据,但我的知识有限。请高手帮忙解决这个问题吗?
提前谢谢。
答案 0 :(得分:0)
创建另一个表,其中您的字段为行,连接到第一个表而不是序列化数据。像这样:
CREATE TABLE `table1` (`id` INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY);
CREATE TABLE IF NOT EXISTS `table2` (
`table1_id` int(10) unsigned NOT NULL,
`data` varchar(255) NOT NULL,
UNIQUE KEY `x` (`table1_id`,`data`)
);
然后您可以像这样插入数据:
INSERT INTO table1 VALUES(NULL); --This will get you the latest incremented ID
INSERT INTO table2 VALUES(1,'Lecteur CD'),(1,'Console de salon'),(1,'TV');
现在您可以单独在一个字段上选择ID:
SELECT id FROM table2 WHERE data = 'Console de salon';
table1是可选的,但是使用数据库内部增量系统通常比为table2编写自己更容易,因为table2需要一个计数器来增加id。
答案 1 :(得分:0)
这应该有帮助
$var1 = !empty($_POST['outil'][1]) ? $_POST['outil'][1] : '';
$var2 = !empty($_POST['outil'][2]) ? $_POST['outil'][2] : '';
$sql = 'SELECT id FROM MyValues WHERE value REGEXP "' . $var1 . '" OR value REGEXP "' . $var2 . '" ';