Хранение массива (двойников) в phpMyAdmin

Я очень новичок в MySQL, хотя раньше использовал базы данных SQL в других контекстах. У меня настроен тестовый сайт с онлайн-панелью cPanel с доступом к phpMyAdmin. Я пытаюсь настроить базу данных MySQL, и пока она работает нормально (я могу подключиться к базе данных и к таблице).

Единственная проблема, с которой я сталкиваюсь, это вставка данных. Я хотел бы вставить весь массив (в частности, массив будет double[]) в один столбец. После просмотра типов столбцов, доступных в phpMyAdmin, кажется, что он не поддерживает вставку массивов, отличных от двоичных массивов.

Я нашел много решений для программной вставки массивов, включая эту тему, но для этого сайта мы будет вставлять данные через онлайн cPanel. Есть ли способ сделать это?


person Snailer    schedule 15.04.2011    source источник
comment
Язык не имеет отношения к вопросу.   -  person Snailer    schedule 15.04.2011


Ответы (2)


Если вам нужен доступ к этим данным и вы хотите использовать возможности SQL для поиска в своем двойном [], вы должны сделать это следующим образом:

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

Важной частью каждой реляционной базы данных является использование хороших ключей. Ключ — это уникальный идентификатор строки, который позволяет вам эффективно обращаться к данным в этой строке.

Другой важной частью реляционных баз данных являются индексы. Индексы не обязательно должны быть уникальными. Но они полезны, если вы пытаетесь выполнить поиск по ним (SQL сделал «индекс» таблицы на основе столбца или группы столбцов).

Если вы хотите создать таблицу с массивом double[], вы можете вместо этого создать вторую таблицу, которая связана с первой таблицей по первичному ключу первой таблицы.

CREATE TABLE base (
    base_id INT AUTO_INCREMENT,
    name    VARCHAR(32),
    PRIMARY KEY(base_id)
);

CREATE TABLE darray (
    base_id INT,
    data    DOUBLE,
    INDEX(base_id)
);

Чтобы получить нужную информацию, вы можете выбрать с помощью оператора JOIN. Если вы хотите получить всю информацию, где base_id равен 3, вы должны написать это так:

SELECT * FROM base
    JOIN darray ON darray.base_id = base.base_id
WHERE base.base_id = 3;

Усовершенствованная форма написания этого с псевдонимом

SELECT * FROM base b
    JOIN darray d ON d.base_id = b.base_id
WHERE b.base_id = 3;

Если вы не хотите иметь доступ к данным, а просто вспоминаете их, вам следует сделать это следующим образом: (Хотя это спорно, я все же рекомендую вышеописанный способ, если вы хотите узнать больше sql)

Я предполагаю, что вы будете использовать PHP, мы будем сериализовать данные (см.: http://php.net/manual/en/function.serialize.php)

Обратите внимание, что у нас не будет таблицы darray, но вместо этого мы добавим

data    BLOB

к базовому столу.

Вставка сериализованных данных PHP

<?php
$serializedData = serialize($darray);
$result = mysql_query("INSERT INTO base (name, data) VALUES('a name', '$serializedData ')");

Получение сериализованных данных

<?php
$result = mysql_query("SELECT data FROM base WHERE base_id=3");
if($result && mysql_affected_rows($result) > 0) {
    $serializedData = mysql_result($result, 0, 'data');
    $darray = unserialize($serializedData);
}
person ohmusama    schedule 15.04.2011
comment
Хотя этот ответ на самом деле не касался вопроса, это то, что я в конечном итоге сделаю. Спасибо за помощь! - person Snailer; 17.04.2011

Вы можете импортировать данные для таблиц с помощью файла .sql (по сути, это просто файл, полный запросов на вставку), но phpMyAdmin не поддерживает вставку данных из произвольных типов данных. Если вы хотите вставить массив double[] в виде нескольких строк в таблицу, вам нужно будет использовать подход, аналогичный тому, который вы использовали в связанном потоке.

(Обратите внимание, что вы всегда можете написать такую ​​программу специально для создания файла .sql, который вы затем используете для развертывания.)

person Henry Merriam    schedule 15.04.2011
comment
Я не думаю, что он хочет импортировать, а скорее вставить - person ohmusama; 15.04.2011
comment
Я пытаюсь настроить базу данных MySQL. Однако на данный момент разница академическая. - person Henry Merriam; 15.04.2011
comment
честно говоря, я только что прочитал настройку как создание схемы для хранения его данных. - person ohmusama; 15.04.2011
comment
Извините, если я не был конкретным. Я искал способ вставки данных через cPanel. Хотя, если это невозможно сделать, мне может понадобиться импортировать данные из локального файла. - person Snailer; 15.04.2011
comment
Вы можете вставлять данные с помощью cPanel, но вы, вероятно, не можете сделать это полностью автоматизированным для массива double[] (если вы не напишете программу для экспорта массива в виде списка двойников, и в этом случае вы могли бы просто заставить его написать запрос .) Как вы думали добавить этот double[] в cPanel? В каком формате он сейчас находится, если не хранится в памяти? @Снейлер - person Henry Merriam; 15.04.2011
comment
Я просто планировал, что один из наших администраторов войдет в cPanel и вручную вставит строки данных. т.е. они нажимают «Вставить» и в столбце someDoubleArray просто копируют/вставляют массив в каком-то формате (возможно, {0.1, 0.2, 0.3}) - person Snailer; 15.04.2011
comment
В этом случае просто запустите INSERT запрос к этой таблице с данными. Синтаксис для фактического перечисления чисел будет почти идентичен. - person Henry Merriam; 15.04.2011