这是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。
答案 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对数据进行排序,但是数据仍然需要分解成多维数组,所以我不确定是否有帮助。