php список и выбор данных с использованием таблиц соединения - PullRequest
1 голос
/ 09 апреля 2020

У меня есть эта структура таблицы базы данных для сообщений, категорий и post_categories

сообщений:

| id | title | details
| 1  | test  | test details

категорий:

| id |     name     | parent_id
|  1 |   cat one    |     0
|  2 |   cat two    |     0
|  3 |   cat three  |     0

post_categories

|  category_id  |  post_id
|      1        |     1
|      2        |     1

Я вставляю несколько категорий, используя флажок ввода для каждого сообщения в таблице post_categories. Теперь на странице обновления (domain.com/admin/posts/1/edit) мне нужно показать список категорий и проверить флажок ввода. Могу ли я сгенерировать этот вывод, используя объединение двух таблиц (categories and post_categories) Или мне нужно разделить два запроса (первый из таблицы post_category и второй из categories таблицы) как этот вывод ?! (мой выбор - метод соединения, так как генерировать использовать метод соединения?)

<input type="checkbox" value="1" checked> cat one
<input type="checkbox" value="2" checked> cat two
<input type="checkbox" value="3"> cat three  //unchecked (not in post_categories table)

обновление: для запроса списка категорий:

$query = $this->db->table('categories')
    ->select('id, name, parent_id')
    ->get()
    ->getResultObject();

данные в print_r:

Array
(
    [0] => stdClass Object
        (
            [id] => 1
            [name] => cat one
            [parent_id] => 0
        )

    [1] => stdClass Object
        (
            [id] => 2
            [name] => cat two
            [parent_id] => 0
        )

    [2] => stdClass Object
        (
            [id] => 3
            [name] => cat three
            [parent_id] => 0
        )

    [3] => stdClass Object
        (
            [id] => 4
            [name] => cat4
            [parent_id] => 2
        )

    [4] => stdClass Object
        (
            [id] => 5
            [name] => cat5
            [parent_id] => 0
        )

    [5] => stdClass Object
        (
            [id] => 6
            [name] => cat6
            [parent_id] => 0
        )

)

после объединения:

$query = $this->db->table('categories')
    ->select('id, name, parent_id')
    ->join('post_categories', 'post_categories.category_id = id','left outer')
    ->where('post_categories.post_id', $id)
    ->get()
    ->getResultObject();

и данные:

Array
(
    [0] => stdClass Object
        (
            [id] => 1
            [name] => cat one
            [parent_id] => 0
        )

    [1] => stdClass Object
        (
            [id] => 4
            [name] => cat two
            [parent_id] => 2
        )

)

результат после объединения равен false.

Ответы [ 2 ]

0 голосов
/ 12 апреля 2020

Вы можете сделать это одним запросом, но для этого вам понадобится один дополнительный столбец в запросе, чтобы проверить, используется категория или нет.

SELECT id,  name, if(pc.cat_id IS NULL,0,1) as `value` from categories as ct   LEFT JOIN post_categories as pc on pc.cat_id = ct.id

демонстрационная ссылка

Я надеюсь, что этот запрос будет соответствовать вашим требованиям.

Если вам нужно больше информации о это вы можете посетить этот поток StackOverflow MySQL Присоединиться и создать новое значение столбца

0 голосов
/ 09 апреля 2020

Вы можете выполнить запрос ниже, чтобы получить выбранные категории:

select post_categories.category_id from posts 
left join post_categories on post_categories.post_id=posts.id
left join categories on post_categories.category_id=categories.id;

получить эти идентификаторы в массив и в пределах вашей категории l oop проверить, есть ли идентификаторы в массиве, и проверить их.

довольно просто!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...