![](/img/trans.png)
[英]How do I inner join 2 SQL tables, but only take the first result from the second table?
[英]SQL INNER JOIN selects only one, last row from second table even if id matches
如何從第二個表中按ID選擇所有行? 目前,如果id匹配,它將僅從第二個表中選擇最后一行。
查詢:
SELECT
categories.category_id,
categories.category_name,
subcategories.subcategory_name,
categories.category_data,
categories.category_icon
FROM categories INNER JOIN subcategories ON
subcategories.category_id=categories.category_id";
完整代碼:
public static function getAllCategories()
{
$database = DatabaseFactory::getFactory()->getConnection();
$sql = "
SELECT c.category_id
, c.category_name
, s.subcategory_name
, c.category_data
, c.category_icon
FROM categories c
JOIN subcategories s
ON s.category_id = c.category_id;
";
$query = $database->prepare($sql);
$query->execute();
$all_categories = array();
foreach ($query->fetchAll() as $category) {
array_walk_recursive($category, 'Filter::XSSFilter');
$all_categories[$category->category_id] = new stdClass();
$all_categories[$category->category_id]->category_id = $category->category_id;
$all_categories[$category->category_id]->category_data = $category->category_data;
$all_categories[$category->category_id]->category_icon = $category->category_icon;
$all_categories[$category->category_id]->category_name = $category->category_name;
$all_categories[$category->category_id]->subcategory_name = $category->subcategory_name;
}
return $all_categories;
}
相片:
這是我應該得到的:
這就是我所擁有的:
第一個表正確選擇所有行,但是如果id匹配,第二個表僅選擇最后一行。 如何從第二張表中選擇所有行?
問題出在您的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
為每一行返回一個新對象。 您可以將該對象放入數組中。
查詢:
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 } ?>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.