1

好吧,我写了一个查询并得到一个错误:

字段列表中的列“product_id”不明确错误编号:1052

我需要从 2 个表中选择相同的 id 并按价格比较它们是我写的查询:

$product_sql_test1 = $this->db->query("SELECT `product_id` and 'price'    FROM `" . DB_PREFIX . "product_to_category`INNER JOIN (oc_product)ON oc_product.product_id=prdoduct_to_category.product_id WHERE product_to_category.id=product.id and  price >150 and `category_id`='".$product_info['related_kv4nt_id_1']."'  GROUP BY `product_id` ORDER BY rand() LIMIT 0,10");

哪里可能出现错误以及如何解决?对不起,如果问题太简单了。

4

5 回答 5

2

选择product_id时必须提到表名,因为很多表都有这个列,mysql很困惑从哪个表中选择列

$product_sql_test1 = $this->db->query("SELECT oc_product.`product_id` and 'price'    
FROM `" . DB_PREFIX . "product_to_category`INNER JOIN (oc_product)ON 
oc_product.product_id=prdoduct_to_category.product_id WHERE product_to_category.id=product.id and  price >150 and prdoduct_to_category.`category_id`='".$product_info['related_kv4nt_id_1']."' 
GROUP BY oc_product.`product_id` ORDER BY rand() LIMIT 0,10");
于 2013-07-04T07:27:30.090 回答
0

正确的方法是

$product_sql_test1 = $this->db->query("SELECT `p`.`product_id`, `p`.`price` FROM `" . DB_PREFIX . "product_to_category` `p2c` LEFT JOIN `" . DB_PREFIX . "product` `p` ON `p`.`product_id` = `p2c`.`product_id` WHERE `p`.`price` > 150 and `p2c`.`category_id`='" . (int) $product_info['related_kv4nt_id_1'] . "' GROUP BY `p`.`product_id` ORDER BY rand() LIMIT 0,10");

您还应该考虑格式化您的 SQL 以使其更易于阅读

于 2013-07-04T12:12:53.057 回答
0

为表和列使用别名。

oc.product_id像(对于列)和oc_product oc(对于表)一样访问它

于 2013-07-04T07:30:54.370 回答
0

使用全名:

Tablename.ColumnName

例如,在 GROUP BY 部分中,product_id您的意思并不清楚。

于 2013-07-04T07:26:50.910 回答
0

在 yourSelect和 yourGroup By中,您都需要这样做,use your alias table names along with your column names因为同一列存在于多个表中,因此对于使用哪一个作为结果存在混淆。

于 2013-07-04T07:37:23.387 回答