Bezdepbonusu7Программирование: статьи и ответы

Вопрос

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

Автор вопроса: SnailerОтветов: 2

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

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

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

  • Язык не имеет отношения к вопросу. Snailer 15.04.2011

insert

Ответы

Ответ 1 · ohmusama

Если вам нужен доступ к этим данным и вы хотите использовать возможности 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);
}

Ответ 2 · Henry Merriam

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

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

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы