将所有RGB值存储在数据库中

时间:2015-06-09 19:24:36

标签: php mysql rgb

存储此类内容的最佳方式是什么? (仅一次)在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个查询需要很长时间..

有人知道更简洁的方式吗?

3 个答案:

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

?>