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