如何从第二个表中按ID选择所有行?目前,如果id匹配,它只从第二个表中选择最后一行。
查询:
IdentifierName
完整代码:
ReservedWord
照片:
这是我应该得到的:
这就是我所拥有的:
第一个表正确选择所有行,但如果id匹配,则第二个表仅选择最后一行。如何从第二个表中选择所有行?
答案 0 :(得分:1)
问题在于你的PHP。每次循环使用当前行中的数据替换 $allCategories[$category->category_id]
。因此,当循环完成时,它只包含最后一行的数据。
你应该制作一个多维数组。当一行包含与前一行相同的类别时,将新对象推送到数组上。
foreach ($query->fetchAll() as $category) {
array_walk_recursive($category, 'Filter::XSSFilter');
if (!isset($allCategories[$category->category_id])) {
$allCategories[$category->category_id] = array();
}
$all_categories[$category->category_id][] = $category;
}
由于stdClass
为每行返回一个新对象,因此无需创建新的fetchAll
对象并复制每个属性。您可以将该对象放入数组中。
答案 1 :(得分:1)
<强>查询:强>
SELECT
categories.category_id,
categories.category_name,
subcategories.subcategory_id,
subcategories.subcategory_name,
categories.category_data,
categories.category_icon
FROM categories INNER JOIN subcategories ON
subcategories.category_id=categories.category_id";
修改强>
$subCat = array();
foreach ($query->fetchAll() as $category) {
array_walk_recursive($category, 'Filter::XSSFilter');
$subCat[$category->category_id][] = $category->subcategory_name;
$all_categories[$category->category_id] = new stdClass();
$all_categories[$category->category_id] = $category;
$all_categories[$category->category_id]->subcategory_name = (object) $subCat[$category->category_id];
}
获取数据时
<?php foreach ($this->categories as $category) { ?>
<?= $category->category_data; ?>
<?php foreach ($category->subcategory_name as $subcategory) { ?>
<?= $subcategory; ?>
<?php } ?>
<?php } ?>