WedX - журнал о программировании и компьютерных науках

Sql LEFT JOIN из нескольких идентификаторов

Я хочу показать все имена категорий с моим множественным идентификатором в моем json, но появляется только одно имя категории

$query = "SELECT DISTINCT a.cat_id, a.name, b.category_name FROM users a LEFT JOIN category b ON n.cat_id = b.id";
$categories = $this->get_list_result($query);
$respon = array(
    'posts' => $categories
);
$this->response($this->json($respon), 200);

моя функция

public function get_list_result($query) {
    $result = array();
    $r = $this->mysqli->query($query) or die($this->mysqli->error.__LINE__);
    if($r->num_rows > 0) {
        while($row = $r->fetch_assoc()) {
            $result[] = $row;
        }
    }
    return $result;
}

пользовательская таблица:

id  |   cat_id  |   name
1   |   3,5     |   joe
2   |   6       |   david
3   |   4,5     |   james
4   |   7,6     |   robert

таблица категорий:

id  |   category_name
3   |   apple
4   |   banana
5   |   strawberry
6   |   kiwi
7   |   watermelon

выход;

posts: [
    {
    cat_id: "3,5",
    name: "joe",
    category_name: "apple",
    },
    {
    cat_id: "6",
    name: "david",
    category_name: "kiwi",
    },
    {
    cat_id: "4,5",
    name: "james",
    category_name: "banana",
    },
    {
    cat_id: "7,6",
    name: "robert",
    category_name: "watermelon",
    }
]

но вывод должен быть таким;

posts: [
    {
    cat_id: "3,5",
    name: "joe",
    category_name: "apple, strawberry",
    },
    {
    cat_id: "6",
    name: "david",
    category_name: "kiwi",
    },
    {
    cat_id: "4,5",
    name: "james",
    category_name: "banana, strawberry",
    },
    {
    cat_id: "7,6",
    name: "robert",
    category_name: "watermelon, kiwi",
    }
]

Как я могу это сделать, извините за мой плохой английский. Спасибо за вашу помощь. Я отредактировал свой вопрос, жду вашего ответа.

05.09.2020


Ответы:


1

Вам просто нужно использовать следующий запрос:

select
    user.cat_id, user.name,
    group_concat(category_name)
from user
join category on  find_in_set(category.id, user.cat_id)
group by user.cat_id, user.name;

Вы можете попробовать это здесь, на PHPize.online

05.09.2020
Новые материалы

Я хотел выучить язык программирования MVC4, но не мог выучить его раньше, потому что это выглядит сложно…
Просто начните и учитесь самостоятельно Я хотел выучить язык программирования MVC4, но не мог выучить его раньше, потому что он кажется мне сложным, и я бросил его. Это в основном инструмент..

Лицензии с открытым исходным кодом: руководство для разработчиков и создателей
В динамичном мире разработки программного обеспечения открытый исходный код стал мощной парадигмой, способствующей сотрудничеству, инновациям и прогрессу, движимому сообществом. В основе..

Объяснение документов 02: BERT
BERT представил двухступенчатую структуру обучения: предварительное обучение и тонкая настройка. Во время предварительного обучения модель обучается на неразмеченных данных с помощью..

Как проанализировать работу вашего классификатора?
Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

Работа с цепями Маркова, часть 4 (Машинное обучение)
Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..

Использование машинного обучения и Python для классификации 1000 сезонов новичков MLB Hitter
Чему может научиться машина, глядя на сезоны новичков 1000 игроков MLB? Это то, что исследует это приложение. В этом процессе мы будем использовать неконтролируемое обучение, чтобы..


Для любых предложений по сайту: [email protected]