我有一个查询从表A和表B中提取一些数据。两者之间存在一对多关系,其中表A是一个。我对mysql不是很好,并且想知道我是否可以更好地执行此查询?获取数据的循环是我能够弄清楚如何将其全部用于显示目的的唯一方法,因为查询在表A中为表B中的每个唯一行复制了信息。想知道是否有人可以向我展示更好的方法?
$sql = "
SELECT core.`id` AS attribute_id, core.`gender` as attribute_gender , core.`order` as attribute_order, core.`name` as attribute_name, coreval.`id` AS value_id, coreval.`value` as value_name
FROM `core_attributes` core
LEFT OUTER JOIN `core_attribute_values` coreval
ON core.id = coreval.attribute_id
WHERE core.active = 1
ORDER BY attribute_order
";
try {
$stmt = $dbh->prepare($sql);
$stmt->execute(array(':agency_id' => $agency_id));
$result = array();
while($row = $stmt->fetch()) {
$result[$row['attribute_id']]['attribute_id'] = $row['attribute_id'];
$result[$row['attribute_id']]['attribute_gender'] = $row['attribute_gender'];
$result[$row['attribute_id']]['attribute_order'] = $row['attribute_order'];
$result[$row['attribute_id']]['attribute_name'] = $row['attribute_name'];
$result[$row['attribute_id']]['values'][$row['value_id']] = $row['value_name'];
}
return $result;
}
修改:删除了与我的问题无关的部分查询
答案 0 :(得分:1)
答案 1 :(得分:1)
可以使用进一步的while
循环管理foreach
循环,使其更简单。
while($row = $stmt->fetch()) {
// Set $id for each iteration of the while loop
$id = $row['attribute_id'];
foreach ($row as $key => $value) {
// Set $result to the corresponding key => value pairs
$result[$id][$key] = $value;
}
}
你的mySQL声明对我来说没问题!