Какие объединения в SQL мне нужно, чтобы получить имя категории на основе идентификатора из другой таблицы? - PullRequest
0 голосов
/ 12 июня 2018

Я пытаюсь определить внутренние объединения или тип объединения, который мне нужен в SQL, чтобы получить имя категории на основе идентификатора продукта из другой таблицы.

Я делаюскрипт страницы продукта PHP, использующий мою собственную инфраструктуру MVC, и сейчас я могу легко получить все данные для своего продукта, но мне нужно получить имя категории на основе cat_id.Я не уверен, как выполнить этот тип запроса, поскольку мне никогда не приходилось использовать их раньше.

У меня есть две таблицы: таблица элементов, которая содержит много данных, и важной в этом вопросе является 'cat_id ':

id      name         ###cat_id###
-----------------------------
1      item name         2
2      item name         1
3      item name         3

и вторая база данных - это таблица категорий, которая выглядит следующим образом:

###id###      name         status
-----------------------------
1      catty            1
2      cat              0
3      cat              1

Итак, я хочу сказать, что элемент 1 имеет cat_id = 1, это echosCatty как категория в битах представлений, но я не могу понять, как сделать соединения.

Вот мой PHP-код в представлениях:

                <?php if($data['isProducts']) { foreach($data['products'] as $product) : ?>
                    <div class="col-lg-4 col-md-4 col-sm-6 mb-3">
                        <div class="card h-100 shadow-1 rounded-0">
                            <a href="<?php echo FULL_ROOT;?>/item/<?php echo $product['id']; ?>/">
                                <img class="card-img-top rounded-0" src="<?php echo FULL_ROOT;?>/uploads/items/<?php echo $product['id']; ?>/<?php echo $product['preview_img']; ?>" alt="<?php echo $product['name']; ?>">
                            </a>
                            <div class="card-body text-center">
                                <a href="<?php echo FULL_ROOT;?>/item/<?php echo $product['id']; ?>/"><h2 class="card-title font-weight-bold f-18"><?php echo $product['name']; ?></h2></a>
                                <div class="clearfix">
                                    <a data-toggle="tooltip" data-placement="top" title="Add to Wishlist" href="#" class="btn btn-sm btn-light btn-lightb float-left mr-1"><i class="far fa-heart"></i></a>
                                    <a data-toggle="tooltip" data-placement="top" title="Live Preview" href="<?php echo $product['demo']; ?>" target="_blank" class="btn btn-sm btn-light btn-lightb float-left"><i class="fas fa-desktop"></i></a>
                                </div>
                            </div>
                            <div class="card-footer bg-white">
                                <div class="clearfix">
                                    <button type="button" class="btn btn-sm btn-light float-left btn-lightb">
                                      <!-- get name from cat table based on id -->  <?php echo $product['cat_id']; ?>
                                    </button>
                                    <button type="button" class="btn btn-sm btn-light float-right btn-lightb">
                                        <?php echo $data['settings']['payment_currency_sym'].$product['price']; ?>
                                    </button>
                                </div>
                            </div>
                        </div>
                    </div>
                <?php endforeach; } else { ?>
                    <div class="col-12">
                        <div class="alert alert-primary shadow-1 rounded-0" role="alert">
                            <b><i class="fas fa-info-circle"></i> No Items Available!</b>
                        </div>
                    </div>
                <?php } ?>

Вот мой код контроллера:

public function profile($user_id = '')
{
    // Get data from model
    $sdata = $this->setting->getAll();
    // Check if empty
    if($user_id == '') { redirect(''); }
    // Get data from model
    $udata = $this->user->getUserByUsername($user_id);
    $pdata = $this->user->getUserProducts($udata['id']); //Get the cat name based on id from this bit
    if(is_array($pdata[0]) ) {
        $isProducts = true;
    } else {
        $isProducts = false;
    }
    $data = array(
       "user" => $udata,
       "products" => $pdata,
       "isProducts" => $isProducts,
       "settings" => $sdata
    );
    // Checks if no data found (404)
    if($udata == false) { redirect('error'); }
    // Load view
    $this->view('marketplace/user/profile', $data);     
}

Вот мой код модели:

public function getUserProducts($user_id)
{
   // $bind = [':username' => $user_id];
    $sql = "select ??????????? from msi_items INNER JOIN/OUTER JOIN ?????";
    $results = $this->run($sql);
    //$results = $this->db->select('msi_items','status = 1 AND author_id = :username', $bind);
    if(!is_array($results[0])) {
        $new_results = array();
        array_push($new_results, $results);
        return $new_results;
    } else {
        return $results;
    }
}

1 Ответ

0 голосов
/ 12 июня 2018

Вы можете попробовать что-то вроде:

select i.cat_id, c.name
from items i inner join category c on i.cat_id = c.id

Или, как показано ниже, если вы хотите иметь все элементы, даже если нет категорий.В этом случае вы получите нули там, где нет c.names

select i.cat_id, c.name
from items i left join category c on i.cat_id = c.id
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...