如何从连接表中获取数据
我有两个连接了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
在此先感谢。
使用*在选择你有2列与名称“名称”。指定*到所需的列,而(这将提高在任何情况下的性能),如
c.name as categories_name
因为在查询您重命名“类别”为“C”
尝试改变:
"category" => $row['categories.name']
到
"category" => $row['c.name']
你不应该使用*或者(因为有人先于其他指出我编辑了这个) - 这应该使错误发生的位置更加明显。
这是为什么downvoted?如果它错了,但解释*为什么* – Murph 2009-12-01 19:54:35
'$ row'数组不包含表名,只是列名。 – 2009-12-01 19:56:54
这就是为什么我建议删除*并使用自定义字段名称... – 2009-12-01 19:59:04
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']
。
错误是什么? – 2009-12-01 19:46:49