需要帮助mysql RIGHT join

时间:2015-06-30 03:10:05

标签: php mysql

这是mytable结构?

table:category
id name
1  x
2  y

table:subproduct
id cat_id name myval
1  1      xyz  test
2  1      abc  test2

所以基本上我想从子产品中为类别表的每个id选择所有值,并在php中的数组中显示它?

这是我的PHP代码

$sqlnew = "SELECT c.cat_id,c.cat_title,s.sub_id,s.sub_title,s.store_cashback FROM category c JOIN subproduct s ON c.cat_id = s.pid";
$pdo = getDB();
$stmtnew = $pdo->query($sqlnew);
$resultnew = $stmtnew->fetchAll();
var_dump($resultnew);

我正在使用PHP PDO。

1 个答案:

答案 0 :(得分:0)

如果您想获得具有特定类别ID的所有项目,您应该执行以下操作:

$statement = $pdo->prepare("SELECT * FROM subproduct INNER JOIN category " .
     "ON category.id = subproduct.cat_id WHERE category.id = :id");
$statement->bindValue(":id", $category_id, PDO::PARAM_INT);
$statement->execute();
$data = $statement->fetchAll();

您可以使用它来单独获取每个类别ID并构建如下数组:

$statement = $pdo->query("SELECT id FROM category;");
$ids = $statement->fetchAll(PDO::FETCH_COLUMN, 0);
$data = array();
foreach($ids as $id)
{
    $statement = $pdo->prepare("SELECT * FROM subproduct INNER JOIN category " .
         "ON category.id = subproduct.cat_id WHERE category.id = :id");
    $statement->bindValue(":id", $id, PDO::PARAM_INT);
    $statement->execute();
    $data[$id] = $statement->fetchAll();
}
print_r($data);

我对此并不感到高兴,因为它看起来效率低下,我不喜欢循环查询。您也可以一次请求所有数据,然后重新排列它:

$statement = $pdo->query("SELECT * FROM subproduct");
$data = array();
while($subproduct = $statement->fetch(PDO::FETCH_ASSOC))
{
    $id = $subproduct['cat_id'];
    if (!isset($data[$id])
        $data[$id] = array();
    array_push($data[$id], $subproduct);
}
print_r($data);

我不是很喜欢这个,因为使用PHP来排序MYSQL数据感觉不对,因为这是MYSQL的工作。我本可以请求MYSQL对数据进行排序,但是数据仍然需要分解成多维数组,所以我不确定是否有帮助。