2011-12-08 187 views
0

我有以下的MySQL数据库行。PHP从一个mysql Row的列创建一个多维数组?

id | user_id | title_1|desc_1|link_1|title_2|desc_2|link_2| 

等多达10

从这一行我想删除ID和用户ID,并有导致多维数组。

主要问题是iterarating由我的查询返回的关联数组过来,它分裂成的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' 
) 

和数组等等我怎么能做到这一点我很为难!?

+7

这是非常差的数据库设计。你应该真的在寻找一个更好的设计,以适应这一点。 – Jon

回答

2

正确的答案是重新设计您的数据库使用第三范式。在进一步做任何事之前,你可能应该放下一切并阅读数据库规范化。

适当的设计会是这样的:每个用户

CREATE TABLE user_has_links (
    id INT PRIMARY KEY, 
    user_id INT, 
    title TEXT, 
    description TEXT, 
    link TEXT 
) 

存储多个链接,您只需在每个链接表创建一个新的行。

3

你可能想你的表结构为两个表是这样的:

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; 

当然,parentchild应适当命名的,例如userlinks

+0

为什么不在1数据库中只有parent_id字段? – Stoosh

+0

Michael,Jon,Middus,Kenaniah你们都是对的。我已经开始了对Normalization的研究,这是非常好的建议,谢谢大家。摆脱Kenaniah表女巫只是一个表似乎是正确的事情,我不明白为什么我需要一个父表和一个孩子,我想也许只有当我想告诉父母有多少行希望从儿童?你们有什么感想? – Luis

+1

在您当前的设计中,如果您甚至需要第三个链接,那么您需要ALTER TABLE并添加列。那么如果你需要第四个链接,你将不得不再次改变表格。如果您将链接存储在子表中,则更容易,因为您只需为每个用户添加尽可能多的行。 –

2

这里真正的解决方案是修复您的数据库以将这些列标准化为其他表格。但是,如果您无法修复数据库,则此代码将执行以下任务:

// $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'] 
    ) 
); 
} 
+0

虽然这是一个“繁文fix节修复”。正如你所看到的,把事情弄糟很容易。一个错字和* boom *;)。正如迈克尔,乔恩和其他人所说的那样:尽可能规范化数据库。 – middus

+0

对不起,并发编辑出错了。我只是修正了'/ title1/title2',并不意味着删除你的评论。 – middus

+0

@middus我修好了,没关系 –