MySQL从3个表中选择,并把它放在PHP数组中

问题描述:

对不起英文不好和坏标题!MySQL从3个表中选择,并把它放在PHP数组中

我有表 “后”

id title 
1  test Thread 
2  hello 
3  just 

所以有“标签”

tagid tagname 
1  test 
2  russia 
3  new site 

所以有post_tags

tagid postid 
1  1 
2  1 
3  1 

我需要从一个数组下面的var_dump如下:

$posts = array(
    1 => array(
     'title' => 'test Thread', 
     'tags' => array(
      'test', 'russia', 'new site', 
     ), 
    ), 
    2 => array(
     'title' => 'hello', 
     'tags' => NULL 
    ), 
    3 => array(
     'title' => 'just', 
     'tags' => NULL 
    ), 
) 

我试着去做,但我没有得到我想要的东西。

SELECT `post`.`id`, `post`.`title`, `tags`.`tagname` FROM `post` 
LEFT JOIN `post_tags` ON `post_tags`.`tagid` = `post`.`id` 
LEFT JOIN `tags` ON `post_tags`.`tagid` = `tags`.`tagid` 

我得到的SQL次年:

id title   tagname 
1 test Thread  test 
1 test Thread  russia 
1 test Thread  newsite 
2 hello   NULL 
3 just   NULL 

PHP

$query = mysql_query("SELECT `post`.`id`, `post`.`title`, `tags`.`tagname` FROM `post` 
    LEFT JOIN `post_tags` ON `post_tags`.`tagid` = `post`.`id` 
    LEFT JOIN `tags` ON `post_tags`.`tagid` = `tags`.`tagid`"); 
$posts = array(); 
while ($row = mysql_fetch_assoc($query)) 
{ 
    $posts[] = $row; 
} 

var_dump($posts); 

谢谢!

+0

你不能从一个mysql数据库返回一个多维数组。如果您需要这种形式,您必须对结果进行自己的后处理。 – dqhendricks 2012-04-10 21:38:14

+1

仅供参考:如果您使用保留字,则只需要转义表/字段名称。将所有内容倒入反引号只会使查询更加难以阅读。 – 2012-04-10 21:45:40

查询很好。你只需要一些逻辑在你的循环:

while ($row = mysql_fetch_assoc($query)) 
{ 
    if (isset($posts[$row['id']])) { 
     $posts[$row['id']]['tags'][] = $row['tagname']; 
    } 
    else { 
     $posts[$row['id']] = array(
      'title' => $row['title'], 
      'tags' => $row['tagname'] === null ? null : array($row['tagname']) 
     ); 
    } 
} 

如果你已经看到以相同的帖子ID行,然后你从当前行要的是标签名(所以它添加到“标签”阵列)。如果这是第一次看到这个帖子ID,只需将其添加到$posts,稍微小心一点就可以将“标签”设置为null或带有一个元素的数组。

试试这个:

while ($row = mysql_fetch_assoc($query)) 
{ 
    if(!isset($posts[$row["id"]])) { 
     $posts[ $row["id"] ] = array("title" => $row["title"], "tags" => array()); 
    } 
    array_push($posts[ $row["id"] ][ "tags" ], $row["tagname"]); 
} 

我不能对它进行调试,所以告诉我,如果你得到任何错误

你不能得到一个多维数组从一个MySQL数据库回来。如果您需要这种形式,您必须对结果进行自己的后处理。这样的事情可能吗?

$posts = array(); 
while ($row = mysql_fetch_assoc($query)) 
{ 
    if (!isset($posts[$row['id']])) { 
     $posts[$row['id']] = array(); 
     $posts[$row['id']]['title'] = $row['title']; 
     $posts[$row['id']]['tags'] = array(); 
    } 
    if ($row['tagname'] != null) $posts[$row['id']]['tags'][] = $row['tagname']; 
}