Как получить данные из объединенной таблицы

0

У меня есть две таблицы, соединенные с c.id = p.category_id. Я хочу получить category.name, но он дает ошибку. Может ли кто-нибудь сказать мне, как получить данные из объединенного стола?

function getGalleryone(){
     $data = array();
     $query = 'SELECT *
     FROM products AS p
     JOIN categories AS c
     ON c.id = p.category_id
     WHERE c.name = "Galleri1"
     AND p.status = "active"' ;
     $Q = $this->db->query($query);
     /*
     $this->db->select('*');
     $this->db->where('categories.name','Galleri 1');
     $this->db->where('products.status', 'active');
     $this->db->join('categories', 'categories.id = products.category_id');
     $this->db->order_by('name','random'); 
     $Q = $this->db->get('products');
     */
     if ($Q->num_rows() > 0){
       foreach ($Q->result_array() as $row){
         $data = array(
            "id" => $row['id'],
        "name" => $row['name'],
            "shortdesc" => $row['shortdesc'],
        ...
            ...
        "category" => $row['categories.name']
            );
       }
    }
    $Q->free_result();    
    return $data;  

Продукты для баз данных

CREATE TABLE IF NOT EXISTS `products` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) NOT NULL,
  `shortdesc` varchar(255) NOT NULL,
  `longdesc` text NOT NULL,
  `thumbnail` varchar(255) NOT NULL,
  `image` varchar(255) NOT NULL,
  `class` varchar(255) DEFAULT NULL,
  `grouping` varchar(16) DEFAULT NULL,
  `status` enum('active','inactive') NOT NULL,
  `category_id` int(11) NOT NULL,
  `featured` enum('true','false') NOT NULL,
  `price` float(4,2) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=20 ;

Категории базы данных

CREATE TABLE IF NOT EXISTS `categories` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) NOT NULL,
  `shortdesc` varchar(255) NOT NULL,
  `longdesc` text NOT NULL,
  `status` enum('active','inactive') NOT NULL,
  `parentid` int(11) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=15 ;
...
...

Сообщение об ошибке

A PHP Error was encountered

Severity: Notice

Message: Undefined index: categories.name

Filename: models/mproducts.php

Line Number: 111

Спасибо заранее.

  • 0
    В чем ошибка?
Теги:
join

3 ответа

0

Столбец categories.name фактически будет возвращен как только $row['name'] в результирующем наборе, а не $row['categories.name']. Поскольку products также имеет столбец name, один заменит другой. Вместо выбора каждого поля с помощью подстановочного символа * вы должны указать, какие поля вы хотите вернуть. Например:

 SELECT p.*, c.name AS category
 FROM products AS p
 JOIN categories AS c
 ON c.id = p.category_id
 WHERE c.name = "Galleri1"
 AND p.status = "active"

Затем вы можете ссылаться на название категории как $row['category'].

0

Потому что в вашем запросе вы переименовываете "категории" как "c"

Попробуйте изменить:

"category" => $row['categories.name']

к

"category" => $row['c.name']

Вы также не должны использовать * (как указывал кто-то еще, прежде чем я это редактировал), это должно было сделать более очевидным, где была ошибка.

  • 0
    Почему это было понижено? Если это неправильно, но объясните, почему
  • 1
    Массив $row не содержит имен таблиц, только имена столбцов.
Показать ещё 2 комментария
0

Используя * в списке, у вас есть 2 столбца с именем "name". укажите * в требуемые столбцы (это улучшит производительность в любом случае), например

c.name as categories_name 

Ещё вопросы

Сообщество Overcoder
Наверх
Меню