2009-12-01 8 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

무엇이 오류입니까? –

답변

0

*를 선택하면 이름이 "name"인 열이 2 개 있습니다. 쿼리에 당신이 "C"

로 "범주"의 이름을 변경하기 때문에 같은

c.name as categories_name 
-1

(이것은 어떤 경우에 성능이 향상됩니다) 오히려 필요한 컬럼에 *를 지정 변경해보십시오 :

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

당신은 사용하지 말아야

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

에 * 중 (전에 다른 사람이 지적 나는 이것을 편집했다.) 그것은 오류가있는 곳을 더 분명하게했을 것이다.

+0

왜 이것이 downvoted 되었습니까? 그것의 잘못된 벌금,하지만 설명 * 왜 * – Murph

+1

'$ row' 배열 테이블 이름, 그냥 열 이름을 포함하지 않습니다. –

+0

그 이유는 내가 * 제거하고 사용자 정의 필드 이름을 사용하는 것이 좋습니다 ... –

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']으로 참조 할 수 있습니다.

관련 문제