0

请高手,我有以下输入:

<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";} |
+----+--------+--------------------------------------------------------------+

字段包含一个从闲置数组序列化的字符串:

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 中使用正则表达式,但我的知识有限。请问高手能帮忙解决这个问题吗?

先感谢您。

4

2 回答 2

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。

于 2013-01-26T13:08:15.193 回答
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 . '" ';
于 2013-01-26T13:31:56.993 回答