Сохранить все значения 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 запросом за раз ..

Кто-нибудь знает более аккуратный способ?

0

Решение

Вы можете вставить более одного набора значений одновременно.

$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

Другие решения

Вы можете добавить вставки в одну длинную строку. Обязательно заканчивайте каждую вставку точкой с запятой.

$sql = $sql . 'INSERT INTO rgbcolors (r,g,b) VALUES ('.$r.','.$g.','.$b.');';

Тогда после цикла:

mysqli_query($con, $sql);

Однако существует максимальная длина строки, которую можно отправить в базу данных MYSQL. Смотрите эту статью SO для получения дополнительной информации. Поэтому вам, вероятно, потребуется отправлять данные каждые, может быть, каждые 1000 или 10000 итераций. 10000 будет строкой размером от 2 до 3 МБ.

0

Вы можете группировать свои вставки в отдельные операторы.

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

?>
-1
По вопросам рекламы [email protected]