2009-12-01 58 views
0

我有两个连接了c.id = p.category_id的表。 我想获取categories.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

错误是什么? – 2009-12-01 19:46:49

回答

0

使用*在选择你有2列与名称“名称”。指定*到所需的列,而(这将提高在任何情况下的性能),如

c.name as categories_name 
-1

因为在查询您重命名“类别”为“C”

尝试改变:

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

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

你不应该使用*或者(因为有人先于其他指出我编辑了这个) - 这应该使错误发生的位置更加明显。

+0

这是为什么downvoted?如果它错了,但解释*为什么* – Murph 2009-12-01 19:54:35

+1

'$ row'数组不包含表名,只是列名。 – 2009-12-01 19:56:54

+0

这就是为什么我建议删除*并使用自定义字段名称... – 2009-12-01 19:59:04

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']

相关问题