MySQL PHP,如何在选择数据时在mysql中使用regEX

时间:2013-01-26 12:52:42

标签: php mysql regex serialization

请掌握,我有以下输入:

<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中使用正则表达式,如果它可以检查是否至少有发送的数据,但我的知识有限。请高手帮忙解决这个问题吗?

提前谢谢。

2 个答案:

答案 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 . '" ';