MySQL从3个表中选择并将其放入PHP数组中
对不起,英语不好,标题不好 我有一张桌子“post” 所以有了“标签” 所以有一个post_标签MySQL从3个表中选择并将其放入PHP数组中,php,mysql,select,join,Php,Mysql,Select,Join,对不起,英语不好,标题不好 我有一张桌子“post” 所以有了“标签” 所以有一个post_标签 tagid tagname 1 test 2 russia 3 new site tagid postid 1 1 2 1 3 1 我需要下面var_dump中的数组: $posts = array( 1 => array( 'title' => 'test Thread'
tagid tagname
1 test
2 russia
3 new site
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'])
);
}
}
如果您已经看到一行具有相同的post id,那么您只需要当前行中的标记名(因此将其添加到“tags”数组)。如果是第一次看到具有此post 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数据库获取多维数组。如果希望结果以那种形式出现,则必须对其进行自己的后处理。仅供参考:只有在使用保留字时,才需要转义表名/字段名。将所有内容转储到backticks中只会使查询更难阅读。
$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'];
}