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);
谢谢!
答
查询很好。你只需要一些逻辑在你的循环:
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'];
}
你不能从一个mysql数据库返回一个多维数组。如果您需要这种形式,您必须对结果进行自己的后处理。 – dqhendricks 2012-04-10 21:38:14
仅供参考:如果您使用保留字,则只需要转义表/字段名称。将所有内容倒入反引号只会使查询更加难以阅读。 – 2012-04-10 21:45:40