Php 在阵列中存储大量数据的最佳方式是什么?
我有100000个联系人的数据库 我有一个多选框,我想用它来选择要添加到特定邮件列表中的联系人 我的问题是,我目前正在MySQL中以序列化数组格式(PHP)存储邮件列表的数据 当我在一定数量的联系人上进行选择时,某些内容似乎会中断(我假设内存不足),并且不会更新阵列 在MySQL中是否有存储大型数组的最佳方法,在PHPPhp 在阵列中存储大量数据的最佳方式是什么?,php,mysql,arrays,database,Php,Mysql,Arrays,Database,我有100000个联系人的数据库 我有一个多选框,我想用它来选择要添加到特定邮件列表中的联系人 我的问题是,我目前正在MySQL中以序列化数组格式(PHP)存储邮件列表的数据 当我在一定数量的联系人上进行选择时,某些内容似乎会中断(我假设内存不足),并且不会更新阵列 在MySQL中是否有存储大型数组的最佳方法,在PHParray()中是否有保持低内存使用率的最佳方法 代码示例 if(isset($_POST['add'])) { $name = $core->EscapeStrin
array()
中是否有保持低内存使用率的最佳方法
代码示例
if(isset($_POST['add'])) {
$name = $core->EscapeString($_POST['name']);
$desc = $core->EscapeString($_POST['desc']);
foreach($_POST['addSelect'] as $null => $id) {
if(!in_array($id, $recipientArray)) {
$recipientArray[] = $id;
}
}
$contacts->updateML($lid, $name, $desc, serialize($recipientArray));
}
else if(isset($_POST['rm'])) {
$name = $core->EscapeString($_POST['name']);
$desc = $core->EscapeString($_POST['desc']);
foreach($recipientArray as $null => $id) {
foreach($_POST['rmSelect'] as $null1 => $id1) {
if($id == $id1) {
unset($recipientArray[$null]);
}
}
}
$contacts->updateML($lid, $name, $desc, serialize($recipientArray));
}
UpdateML函数
//Class 3, Function 16
function updateML($lid = '', $name = '', $desc = '', $recip = '') {
global $MySQLi;
$query = "UPDATE `mailing_lists` SET `name` = '".$name."', `desc` = '".$desc."', `recipients` = '".$recip."' WHERE `list_id` = '".$lid."' LIMIT 1";
$commit = $MySQLi->query($query);
if($commit == false) {
die("Issues with the database were detected. Please email peter@domain.com quoting error code: <strong>CLASS3/16.1</strong>.");
}
else
{
return true;
}
}
//类3,函数16
函数updateML($lid='',$name='',$desc='',$recip=''){
全球$MySQLi;
$query=“UPDATE`mailing\'lists`SET`name`='”、`desc`='”、`desc`='”、`recipients`='”、$recip.”其中`list\'id`='”、$lid.“$lid 1”;
$commit=$MySQLi->query($query);
如果($commit==false){
检测到数据库问题。请发送电子邮件peter@domain.com引用错误代码:CLASS3/16.1);
}
其他的
{
返回true;
}
}
您需要两张表。一个用于邮件列表定义,一个用于收件人。在recipients表中,您需要有一个将记录与相应的邮件列表关联的外键
所以邮件列表表如下所示:
ml_id
name
desc
r_id
email
ml_id
收件人如下所示:
ml_id
name
desc
r_id
email
ml_id
首先将邮件列表添加到数据库:
INSERT INTO mailing_lists SET name = 'my first list', desc = 'mailsareus'
添加新收件人时,只需将新行添加到收件人表:
INSERT INTO recipients SET email = 'xxx@mail.com', ml_id = 1
如果需要从邮件列表中获取所有收件人和定义,只需使用join
SELECT * FROM mailing_lists JOIN recipients ON recipients.ml_id = mailing_lists.ml_id
你需要两张桌子。一个用于邮件列表定义,一个用于收件人。在recipients表中,您需要有一个将记录与相应的邮件列表关联的外键 所以邮件列表表如下所示:
ml_id
name
desc
r_id
email
ml_id
收件人如下所示:
ml_id
name
desc
r_id
email
ml_id
首先将邮件列表添加到数据库:
INSERT INTO mailing_lists SET name = 'my first list', desc = 'mailsareus'
添加新收件人时,只需将新行添加到收件人表:
INSERT INTO recipients SET email = 'xxx@mail.com', ml_id = 1
如果需要从邮件列表中获取所有收件人和定义,只需使用join
SELECT * FROM mailing_lists JOIN recipients ON recipients.ml_id = mailing_lists.ml_id
你需要两张桌子。一个用于邮件列表定义,一个用于收件人。在recipients表中,您需要有一个将记录与相应的邮件列表关联的外键 所以邮件列表表如下所示:
ml_id
name
desc
r_id
email
ml_id
收件人如下所示:
ml_id
name
desc
r_id
email
ml_id
首先将邮件列表添加到数据库:
INSERT INTO mailing_lists SET name = 'my first list', desc = 'mailsareus'
添加新收件人时,只需将新行添加到收件人表:
INSERT INTO recipients SET email = 'xxx@mail.com', ml_id = 1
如果需要从邮件列表中获取所有收件人和定义,只需使用join
SELECT * FROM mailing_lists JOIN recipients ON recipients.ml_id = mailing_lists.ml_id
你需要两张桌子。一个用于邮件列表定义,一个用于收件人。在recipients表中,您需要有一个将记录与相应的邮件列表关联的外键 所以邮件列表表如下所示:
ml_id
name
desc
r_id
email
ml_id
收件人如下所示:
ml_id
name
desc
r_id
email
ml_id
首先将邮件列表添加到数据库:
INSERT INTO mailing_lists SET name = 'my first list', desc = 'mailsareus'
添加新收件人时,只需将新行添加到收件人表:
INSERT INTO recipients SET email = 'xxx@mail.com', ml_id = 1
如果需要从邮件列表中获取所有收件人和定义,只需使用join
SELECT * FROM mailing_lists JOIN recipients ON recipients.ml_id = mailing_lists.ml_id
100000条记录不是“大数据”的公平点。措辞不正确已编辑。如果您正在将数据序列化到MySQL,则可能是做错了。您可以使用
SplFixedArray
来降低内存占用。但是,如果您使用关系数据库,那么在其中保存序列化数据是没有意义的。你把法拉利变成了Trabant,这样,它就变成了一个美化的文本文件。解决问题的真正办法是规范化数据。由于内存不足或其他原因,将所有信息粘贴到数组中的所有其他尝试都会在某个时候导致失败。正如@N.B.所述,最好的方法是规范化数据和数据库。因此,将每个id
保存在一个单独的记录中。不要害怕你的桌子会变得很大。在一个mysql
数据库中拥有数百万条记录并不重要。10万条记录不是“大数据”的公平点。措辞不正确已编辑。如果您正在将数据序列化到MySQL,则可能是做错了。您可以使用SplFixedArray
来降低内存占用。但是,如果您使用关系数据库,那么在其中保存序列化数据是没有意义的。你把法拉利变成了Trabant,这样,它就变成了一个美化的文本文件。解决问题的真正办法是规范化数据。由于内存不足或其他原因,将所有信息粘贴到数组中的所有其他尝试都会在某个时候导致失败。正如@N.B.所述,最好的方法是规范化数据和数据库。因此,将每个id
保存在一个单独的记录中。不要害怕你的桌子会变得很大。在一个mysql
数据库中拥有数百万条记录并不重要。10万条记录不是“大数据”的公平点。措辞不正确已编辑。如果您正在将数据序列化到MySQL,则可能是做错了。您可以使用SplFixedArray
来降低内存占用。但是,如果您使用关系数据库,那么在其中保存序列化数据是没有意义的。你把法拉利变成了Trabant,这样,它就变成了一个美化的文本文件。解决问题的真正办法是规范化数据。由于内存不足或其他原因,将所有信息粘贴到数组中的所有其他尝试都会在某个时候导致失败。正如@N.B.所述,最好的方法是规范化数据和数据库。因此,将每个id
保存在一个单独的记录中。不要害怕你的桌子会变得很大。在一个mysql
数据库中拥有数百万条记录并不重要。10万条记录不是“大数据”的公平点。措辞不正确如果您正在将数据序列化到MySQL中,则可能