PHP内连接类别

时间:2015-06-09 15:47:57

标签: php mysql

我被困在PHP上。 我正在尝试加入两个表

$statement = $database->prepare("SELECT categories.name as category_name ,pages.name as page_name FROM categories INNER JOIN pages ON categories.name = pages.category");
$statement->execute();
$fetch = $statement->fetchAll(PDO::FETCH_ASSOC);

$returnValues = '';
foreach($fetch as $item){
    if(isset($returnValue[$item->category_name]){
        array_push($returnValue[$item->category_name], $item->page_name);
    }else{
        $returnValue[$item->category_name][] = $item->page_name;
    }
}
echo "<pre>";
print_r($returnValue);

基本上我想获得一个获得类别名称的数组,然后是属于该类别的所有页面。现在在这个PHP代码上,我得到了大量的数组,每个人都拥有类别名称和一个页面..我无法解决它,谢谢。

2 个答案:

答案 0 :(得分:1)

别名类别名称,以便您可以将其与页面名称区分开来。此查询将从表页中选择类别名称和所有列。

$statement = $database->prepare("SELECT categories.name AS category_name, pages.* FROM categories INNER JOIN pages ON categories.name = pages.category");
$statement->execute();
$fetch = $statement->fetchAll(PDO::FETCH_ASSOC);

按类别名称对每一行进行分组。将$ row [&#39; id&#39;]更改为您用作表格页面主要ID的任何内容。

$categoryPages = array();
foreach ( $fetch as $row ) {
    $categoryPages[$row['category_name']][$row['id']] = $row;
}
print_r($categoryPages);

答案 1 :(得分:0)

这是对原始代码的修改,基本上应该按照您的意愿执行,可能需要进行一些小的语法更改。

$statement = $database->prepare("SELECT categories.name as category_name ,pages.name as page_name FROM categories INNER JOIN pages ON categories.name = pages.category");
$statement->execute();
$fetch = $statement->fetchAll(PDO::FETCH_ASSOC);

$returnValues = '';
foreach($fetch as $item){
    if(isset($returnValue[$item->category_name]){
        array_push($returnValue[$item->category_name], $item->page_name);
    }else{
        $returnValue[$item->category_name][] = $item->page_name;
    }
}
echo "<pre>";
print_r($returnValue);

这样的事可能对你有用......我知道它并不完美,查询准备中缺少一些东西,但它应该足以让你前进。

编译后的数组应按照您希望的方式进行格式化。

$statement = $database->prepare("SELECT categories.name FROM categories");
$statement->execute();
$fetch = $statement->fetchAll(PDO::FETCH_ASSOC);

$compiled = '';
foreach($fetch as $category){
    $statement = $database->prepare("SELECT page.name FROM pages WHERE pages.category = $category");
    $statement->execute();
    $pages = $statement->fetchAll(PDO::FETCH_ASSOC);
    foreach($pages as $page)
        array_push($compiled[$category], $page);
    }
}
echo "<pre>";
print_r($compiled);