Хранение массива (удваивается) в phpMyAdmin - PullRequest
2 голосов
/ 15 апреля 2011

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

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

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

Ответы [ 2 ]

0 голосов
/ 15 апреля 2011

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

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

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

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

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

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);
}
0 голосов
/ 15 апреля 2011

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

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

...