PHP从一个mysql行';s列?
我有以下mysql数据库行PHP从一个mysql行';s列?,php,mysql,arrays,multidimensional-array,row,Php,Mysql,Arrays,Multidimensional Array,Row,我有以下mysql数据库行 id | user_id | title_1|desc_1|link_1|title_2|desc_2|link_2| 以此类推,最多10个 从这一行中,我想删除id和用户id,并得到多维数组 主要问题是对查询返回的关联数组进行数据挖掘,并将其拆分为3个数组 Array = ( [0] = array ( [tite_1] => 'sometitle' [desc_1] => 'description' [link_1] =
id | user_id | title_1|desc_1|link_1|title_2|desc_2|link_2|
以此类推,最多10个
从这一行中,我想删除id和用户id,并得到多维数组
主要问题是对查询返回的关联数组进行数据挖掘,并将其拆分为3个数组
Array = (
[0] = array (
[tite_1] => 'sometitle'
[desc_1] => 'description'
[link_1] => 'a link'
)
[1] = array (
[tite_2] => 'sometitle'
[desc_2] => 'description'
[link_2] => 'a link'
)
等等,我怎么能做到这一点呢?我被难住了 正确的答案是重新设计数据库以使用第三范式。在做进一步的工作之前,您可能应该放下所有东西,阅读数据库规范化方面的内容 正确的设计应该是:
CREATE TABLE user_has_links (
id INT PRIMARY KEY,
user_id INT,
title TEXT,
description TEXT,
link TEXT
)
要为每个用户存储多个链接,只需在此表中为每个链接创建一个新行。您可能希望将表结构为两个表,如下所示:
parent(id, user_id, more_fields, whatever_you_need_here)
child(parent_id, title, desc, link)
现在很容易获得您想要的数据
SELECT title, desc, link FROM child WHERE parent_id = 12;
当然,
父项
和子项
的命名应该恰当,例如用户
和链接
这里真正的解决方案是修复数据库,将这些列规范化为其他表。但是,如果您无法修复数据库,则此代码将执行以下操作:
// $output will hold your full result set
$output = array();
while ($row = mysql_fetch_assoc($result)) {
// For each row returned, add a new array to $output
$output[] = array(
// The new array consists of 10 sub-arrays with the correct
// keys and values
array (
"title"=>$row['title1'],
"desc"=>$row['desc1'],
"link"=>$row['link1']
),
array (
"title"=>$row['title2'],
"desc"=>$row['desc2'],
"link"=>$row['link2']
),
...,
...,
array (
"title"=>$row['title10'],
"desc"=>$row['desc10'],
"link"=>$row['link10']
)
);
}
这是非常糟糕的数据库设计。你真的应该寻找一个更好的设计来适应这个问题,尽管这是一个“繁文缛节”。正如你所看到的,事情很容易搞砸。一个打字错误和砰的一声;)。正如Michael、Jon和其他人所说:如果可能的话,规范化您的数据库。对不起,并发编辑出了问题。我刚刚修复了
/title1/title2
,并不想删除你的评论。@middus我修复了它,没问题,为什么你不在1数据库中有一个parent_id字段?Michael,Jon,middus,Kenaniah你都对了。我已经开始了关于规范化的研究,这是一个很好的建议,谢谢大家。我不明白为什么我需要一个父表和一个子表,我想也许只有当我想告诉父表希望从子表中得到多少行时,我才需要这样做?你们认为呢?在你们当前的设计中,若你们需要第三个链接,即使对于一个用户,你们也需要修改表和添加列。然后,若您需要第四个链接,则必须再次更改表。如果您将链接存储在子表中,这会更容易,因为您只需为每个用户添加所需的行数即可。@Stoosh,因为我对他的应用程序不太了解。它可以是一个包含用户名、电子邮件等的用户表,也可以是完全不同的内容。@BillKarwin很好的解释!谢谢你给我打电话:)。