SQL:使用第一个查询的结果组合两个选择查询

时间:2016-12-29 16:28:15

标签: php mysql

我知道这会使用left joinleft outer join或类似的东西,但这些类型的查询总是让我失望。

我有两张桌子:

类别

ID    CatName          CatSlug
1     Big Shirts       big-shirts

ID    ItemName         Category    Price    ...
1     Big Red Shirt    1           20.00

所以我试图返回给定类别中的所有项目,由类别slug查询。我还需要返回类别名称。所以现在,我的两个问题是:

$return = array();

$query = "SELECT * FROM categories WHERE CatSlug = :CatSlug LIMIT 1"; 

$param = array(
    'CatSlug' => $slug
);

$result = $this->Db->selectOne($query, $param);

if ($result) { // If result exists

    $return['Category'] = $result['CatName']; // Need to return cat name

    $query = "SELECT * FROM items WHERE Category = :Category"; 

    $param = array(
        'Category' => $result['ID']
    );

    $result = $this->Db->selectAll($query, $param);

    if ($result) { // If result exists

        $return['Items'] = $result;

    } else { // If result does not exist

        $return['Items'] = array();

    } // End if result does not exist

}

return $return;

所以,我返回一个带有两个键的数组:Category包含CatName表中的categories值,Items包含一个包含所有项目的数组类别,如果没有,则为空白数组。

如何组合这两个查询?

1 个答案:

答案 0 :(得分:0)

  1. 首先,您应该在table page_categories和items之间使用LEFT JOIN。
  2. id
    1. 循环结果并返回数据
    2. SELET * FROM page_categories p   
      LEFT JOIN items i ON p.category = i.id 
      WHERE c.CatSlug = :CatSlug