【发布时间】:2012-02-21 17:42:37
【问题描述】:
我正在使用 Codeigniter,我正在尝试从两个表中调用信息:
产品: ID, 姓名, 价格, 描述, 类型标识
产品类型: t类别, 名称
我正在尝试从 Product 中提取所有信息并使用 Product.typeID 来匹配 Product_Type 表并仅拉回 tName。大多数情况下,Product_Type 表中至少有 3 行具有相同的 typeID。示例:
产品 1 将是一件 20 美元的红色衬衫,我需要大号、中号和小号。
我曾尝试使用 JOIN 来执行此操作,但它为我提供了我需要的 3 种类型,而且还复制了 3 次衬衫信息。
这是我的代码:
$this->db->select('product.id, product.name, product.price, product.description, product_type.tName');
$this->db->from('product');
$this->db->where('perm_name', $id);
$this->db->join('product_type', 'product_type.tCategory = product.typeId', 'LEFT OUTER');
$query = $this->db->get();
任何帮助将不胜感激。
编辑:
Array
(
stdClass Object
(
[id] => 2
[name] => Tshirt 1
[price] => 20
[description] => Awesome tshirt
[tName] => 1
)
)
Array
(
[0] => stdClass Object
(
[tCategory] => 1
[tName] => Small
)
[1] => stdClass Object
(
[tCategory] => 1
[tName] => Medium
)
[2] => stdClass Object
(
[tCategory] => 1
[tName] => Large
)
)
【问题讨论】:
-
如果您的产品重复了 3 次,则您的联接条款不起作用,并且您执行的是笛卡尔积而不是左联接。你能提供一些导致你的问题的示例数据吗?我对product_type.tCategory 和product.typeID 列的内容特别感兴趣。尝试用“LEFT”替换“LEFT OUTER”。
-
我添加了 print_r 时的样子。它说左外角的原因是我正在试验这些设置,看看它们中的任何一个是否会产生我想要的结果。
-
相关列不包括在内。您正在对列 product_type.tCategory 和 product.typeID 执行连接。 “左”连接只是“左外”连接的缩写。经过短暂的研究,我发现你只用“左”来称呼它,例如
$this->db->join('comments', 'comments.id = blogs.id', 'left');codeigniter.com/user_guide/database/active_record.html -
product_type.tCategory = product.typeID 是我玩弄的一个错误,它应该是 product_type.tCategory = product.typeId 我放在数组中的是使用的结果'剩下'。它仍然给了我 3 个相同信息的数组。
-
是的。您使用 $this->db->select() 语句过滤了相关列。我要求提供表格中的数据,而不是您的查询结果。如果我们看不到执行连接的列的值,我们几乎无法帮助您。只需输入
select * from product和select * from product_type的结果
标签: php mysql codeigniter