Какой лучший способ хранить что-то подобное? (только один раз) в базе данных 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 запросом за раз ..
Кто-нибудь знает более аккуратный способ?
Вы можете вставить более одного набора значений одновременно.
$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();
}
}
}
Вы можете добавить вставки в одну длинную строку. Обязательно заканчивайте каждую вставку точкой с запятой.
$sql = $sql . 'INSERT INTO rgbcolors (r,g,b) VALUES ('.$r.','.$g.','.$b.');';
Тогда после цикла:
mysqli_query($con, $sql);
Однако существует максимальная длина строки, которую можно отправить в базу данных MYSQL. Смотрите эту статью SO для получения дополнительной информации. Поэтому вам, вероятно, потребуется отправлять данные каждые, может быть, каждые 1000 или 10000 итераций. 10000 будет строкой размером от 2 до 3 МБ.
Вы можете группировать свои вставки в отдельные операторы.
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";
}
}
}
}
?>