在phpMyAdmin中存储数组(双精度)

时间:2011-04-15 00:12:51

标签: mysql insert phpmyadmin

我对MySQL很新,虽然我以前在其他环境中使用过SQL数据库。我有一个测试站点设置,其中有一个可以访问phpMyAdmin的在线cPanel。我正在尝试设置MySQL数据库,到目前为止它工作正常(我可以连接到数据库表)。

我遇到的唯一问题是插入数据。我想将整个数组(具体来说,数组将是double[])插入一列。在查看phpMyAdmin中可用的列类型之后,它似乎不支持插入二进制数组以外的数组。

我发现了许多以编程方式插入数组的解决方案,包括this线程,但是对于这个站点,我们将通过在线cPanel插入数据。有没有办法做到这一点?

2 个答案:

答案 0 :(得分:0)

您可以导入具有.sql文件的表的数据(基本上只是一个充满插入查询的文件),但phpMyAdmin不支持从任意数据类型插入数据。如果要将double[]数组作为多个行插入表中,则需要采用与所链接的线程类似的方法。

(请注意,您始终可以编写此类程序,以明确生成.sql文件,然后将其用于部署。)

答案 1 :(得分:0)

如果你想访问那些数据,并希望能够使用SQL的强大功能在你的double []中搜索,你应该这样做:

首先,您应该花一些时间研究关系数据库。它们允许您创建链接数据。

每个关系数据库的一个重要部分是使用好的密钥。密钥是行的唯一标识符,允许您以有效的方式访问该行上的数据。

关系数据库的另一个重要部分是索引。索引不必是唯一的。但是如果你试图搜索它们是有用的(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);
}