Php 得到这样一个数组的结果

标签 php arrays sorting

我的数据库是这样的

listing_id  category_id
1            1,4,8,9
2            2,3,5,10
3            7,8,9,5,3

现在分类表是这样的

id  category_name
1   apple
2   grapes
3   banana
4   pineapple
5   mango
6   strawberry
7   corn
8   leech
9   tomato
10  potato

我想制作一个完整的数组,我将从这样的表中获取结果

Array
(
    [0] => Array
        (
            [listing_id] => 1
            [category_name] => apple,pineapple,leeche,tomato
        )

    [1] => Array
        (
            [listing_id] => 2
            [category_name] => grapes,banana,mango,potato
        )

    [2] => Array
        (
            [listing_id] => 3
            [category_name] => corn,leeche,tomato,mango,banana
        )
)

所以为此我制作了我的 php 代码

$servername = "localhost";
$username = "root";
$password = "root";
$dbname = "listings";
$mysqli = new mysqli($servername, $username, $password, $dbname);

if (mysqli_connect_errno()) {
    printf("Connect failed: %s\n", mysqli_connect_error());
    exit();
}

$listing_query = "SELECT * FROM `listings` ORDER BY listing_id";
$listing_array = array();
$category_array = array();
if( $result = $mysqli->query($listing_query) ) {
    while( $obj = $result->fetch_object() ) {
        $categories = $obj->categories;
        $listing_id = $obj->listing_id;
        array_push($category_array, $categories);
        foreach( $category_array as $category_name ) {
          $category_names = explode(',',$category_name);
          $get_category_names = "SELECT * FROM `categories` WHERE `id` = $category_names";
          if( $sql = $mysqli->query($get_category_names) ) {
            while( $object = $sql->fetch_object() ) {
                $category_name = $object->category_name;
                $listing_row['category_name'] = $category_name;
            }
          }
        }
    $listing_row['listing_id'] = $obj->listing_id;   
    array_push($listing_array, $listing_row);
    }
}

print_r($listing_array);

$mysqli->close();

但它根本不起作用。谁能告诉我如何得到像这个数组这样的结果

Array
(
    [0] => Array
        (
            [listing_id] => 1
            [category_name] => apple,pineapple,leeche,tomato
        )

    [1] => Array
        (
            [listing_id] => 2
            [category_name] => grapes,banana,mango,potato
        )

    [2] => Array
        (
            [listing_id] => 3
            [category_name] => corn,leeche,tomato,mango,banana
        )
)

任何帮助和建议都将非常感激。谢谢

已更新

<?php
$servername = "localhost";
$username = "root";
$password = "root";
$dbname = "listings";
$mysqli = new mysqli($servername, $username, $password, $dbname);

if (mysqli_connect_errno()) {
    printf("Connect failed: %s\n", mysqli_connect_error());
    exit();
}

$listing_query = "SELECT * FROM `listings` ORDER BY `listing_id` LIMIT 5 ";
$listing_array = array();
if( $result = $mysqli->query($listing_query) ) {
    while( $obj = $result->fetch_object() ) {
        $categories = $obj->categories;
        $listing_id = $obj->listing_id;
        $listing_row['listing_id'] = $obj->listing_id;
        $Query = "SELECT listing_id, group_concat(Category.category_name) category_name FROM `listings` Listing LEFT JOIN `categories` Category ON FIND_IN_SET(Category.category_id, Listing.categories) group by Listing.listing_id LIMIT 5";
        if($sql = $mysqli->query($Query)){
        while ($object = $sql->fetch_object()) {
        $listing_row['category_name'] = $object->category_name;
        }
        }
        array_push($listing_array, $listing_row);
    }

}

print_r($listing_array);

$mysqli->close();
?>

它在每个数组 block 元素中显示相同的类别名称。

最佳答案

你应该能够像这样使用 group_concat 来获取逗号分隔的列表

$get_category_names = "SELECT GROUP_CONCAT(category_name) as category_name  FROM `categories` WHERE `id` = $category_names";

关于Php 得到这样一个数组的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30577291/

相关文章:

php - 查询为空 PHP 错误

javascript - 单击后如何禁用标记上的单击事件

python - 为基于 2D 条件的子集索引大型 3D HDF5 数据集

c - 调试错误选择排序

php - 为什么此 UPDATE 准备语句不起作用,但在 SQL 数据库中使用时有效

php - 进入 mysql 数据库后,Café 就变成了 Café

ios - 在 if 语句中使用多个 contains 函数 (Swift)

python - Numpy C-Api 将顺序从列更改为行

javascript - 排序数组多维javascript

java - 如何检查一个int数组是否是一个循环排序的数组?