MySQL PHP,在选择数据时如何在MySQL中使用正则表达式

MySQL PHP,在选择数据时如何在MySQL中使用正则表达式,php,mysql,regex,serialization,Php,Mysql,Regex,Serialization,请大师们,我有以下输入: <label >Please choose :</label> <input type="checkbox" name="outil[]" value="TV" /> <input type="checkbox" name="outil[]" value="Lecteur CD" /> 字段值包含从衰减数组序列化的字符串: array(3) { [0]=> string(10) "Lecteur CD"

请大师们,我有以下输入:

<label >Please choose :</label>
<input type="checkbox" name="outil[]" value="TV" />
<input type="checkbox" name="outil[]" value="Lecteur CD" />
字段包含从衰减数组序列化的字符串:

array(3) {
  [0]=>
  string(10) "Lecteur CD"
  [1]=>
  string(16) "Console de salon"
  [2]=>
  string(2) "TV"
}
现在,当用户检查输入时,他希望数据被发送到服务器端,我需要选择
id
,其中检查的输入存在于
字段中(这是一个数组中的序列化值-如果我可以在_数组中使用该函数,这将非常容易)

我的查询如下所示:

"SELECT id FROM MyValues WHERE value =  '".serialize($_POST['outil'])."' ";
但这不起作用,这是正常的,因为用户只能检查一个输入,他必须找到数据

我正在考虑在mysql中使用regex,如果可能的话,可以检查是否至少有发送的数据,但我的知识有限。请大师帮忙解决这个问题好吗


提前感谢。

创建另一个表,将字段作为行,连接到第一个表,而不是序列化数据。像这样:

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';
表1是可选的,但使用数据库内部增量系统通常比为表2编写自己的增量系统更容易,因为表2需要一个计数器来增加id。

这应该会有所帮助

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

使用像MongoDb这样的NoSQL db来存储这种无模式数据怎么样?感谢Lilleman的响应,但我确实需要字段值中的序列化值这很好。谢谢你,贾斯帕,不客气。您也可以使用“%%”,而不是REGEXP,因为我们只是在进行普通文本比较。它会更快。
$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 . '" ';