存储此类内容的最佳方式是什么? (仅一次)在MYSQL数据库中? 它需要在表格中插入所有RGB值。
$colors = colourArray(0, 255, $con);
function colourArray($start, $number, $con) {
foreach(range($start,$number) as $r) {
foreach(range($start,$number) as $g) {
foreach(range($start,$number) as $b) {
mysqli_query($con, 'INSERT INTO rgbcolors (r,g,b) VALUES ('.$r.','.$g.','.$b.')');
}
}
}
}
这样可行,但一次完成1个查询需要很长时间..
有人知道更简洁的方式吗?
答案 0 :(得分:1)
您可以一次插入多组值。
$colors = colourArray(0, 255, $con);
function colourArray($start, $number, $con) {
$colors = array();
foreach(range($start,$number) as $r) {
foreach(range($start,$number) as $g) {
foreach(range($start,$number) as $b) {
$colors[] = '('.$r.','.$g.','.$b.')';
}
// this could be moved to the parent foreach if you have enough memory to allocate to this.
mysqli_query($con, 'INSERT INTO rgbcolors (r,g,b) VALUES ' . implode(',', $colors));
$colors = array();
}
}
}
答案 1 :(得分:0)
您可以将INSERT附加到一个长字符串中。确保用分号终止每个INSERT。
$sql = $sql . 'INSERT INTO rgbcolors (r,g,b) VALUES ('.$r.','.$g.','.$b.');';
然后循环:
mysqli_query($con, $sql);
但是,可以将最大字符串长度发送到MYSQL数据库。 See this SO article for more info。因此,您可能需要每隔一千次或每10,000次迭代发送一次数据。 10,000将是2到3 MB的字符串。
答案 2 :(得分:-1)
您可以将插入批处理为单个语句。
INSERT INTO rgb_colors VALUES(r,g,b),(r,g,b),(r,g,b)
我修改了你的函数以删除$con
的东西,因为我没有在这里使用它,但是这里有一个INSERT
(可能是太大了),里面有所有的颜色。
在现实世界中,您希望一次创建约20-30个批次。
在此处查看结果:http://codepad.org/dkuZpt10
<?php
colourArray(0, 255);
function colourArray($start, $number) {
echo "INSERT INTO rgbcolors VALUES \n";
foreach(range($start,$number) as $r) {
foreach(range($start,$number) as $g) {
foreach(range($start,$number) as $b) {
echo "($r,$g,$b),\n";
}
}
}
}
?>