Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP从一个mysql行';s列?_Php_Mysql_Arrays_Multidimensional Array_Row - Fatal编程技术网

PHP从一个mysql行';s列?

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] =

我有以下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] => '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很好的解释!谢谢你给我打电话:)。