【问题标题】:Query left join fetch data problem - Mysql查询左连接取数据问题-Mysql
【发布时间】:2020-09-02 03:16:17
【问题描述】:

我用左连接连接两个表。当我用 Select 全选时,所有行都来了(query1)。但是当我使用 select 拉出一些行时,我只加载了一个数据,而不是图 1 中的所有数据都加载了。是什么原因?

正在加载所有数据查询1

查询1:

SELECT * 
FROM oc_review AS OYLAMA 
JOIN oc_product AS PRODUCT 
    ON (PRODUCT.product_id = OYLAMA.product_id)
INNER JOIN oc_product_to_category AS KATEGORI 
    ON (KATEGORI.product_id = PRODUCT.product_id) 
WHERE KATEGORI.category_id = 69

仅加载 1 个数据查询2

查询2:

SELECT
    AVG(ALL OYLAMA.rating) AS ORTALAMA,
    COUNT(OYLAMA.rating) AS TOPLAMOY 
FROM oc_review AS OYLAMA 
JOIN oc_product AS PRODUCT
    ON (PRODUCT.product_id = OYLAMA.product_id) 
INNER JOIN oc_product_to_category AS KATEGORI
    ON (KATEGORI.product_id = PRODUCT.product_id) 
WHERE KATEGORI.category_id = 69

【问题讨论】:

  • 正确格式化您的代码。没有人会阅读那种单行代码。

标签: mysql sql


【解决方案1】:

一旦你引入聚合函数,如AVG()COUNT(),MySQL 就会创建一个单独的组,所有记录都会放在其中。另请参阅问题MySQL Aggregate Functions without GROUP BY clause 了解更多信息。

您可能想要做的是明确指定GROUP BY 子句,并将GROUP BY 之后的字段也添加到SELECT,例如:

SELECT 
   PRODUCT.product_id, 
   AVG(ALL OYLAMA.rating) AS ORTALAMA,
   COUNT(OYLAMA.rating) AS TOPLAMOY 
FROM oc_review AS OYLAMA 
JOIN oc_product AS PRODUCT 
   ON(PRODUCT.product_id = OYLAMA.product_id) 
INNER JOIN oc_product_to_category AS KATEGORI 
   ON (KATEGORI.product_id = PRODUCT.product_id) 
WHERE KATEGORI.category_id = 69
GROUP BY PRODUCT.product_id

【讨论】:

  • 谢谢,但只打印 2 个值
  • 所以看起来类别 69 只有两个产品,占两行。你想要什么计数和平均值?在我的示例中,您可以获得每个产品的计数和平均值。看来你想要一些不同的东西。也许每个产品和客户?还是每个客户?
  • 你注意到我的示例代码末尾的GROUP BY了吗?
  • 虽然有2个以上的产品,但只显示了其中的2个,可惜sql查询不起作用。
  • 也许尝试删除AVG(ALL OYLAMA.rating) 中的ALL。我不知道那是为了什么。还可以尝试在 PHP 之外直接针对数据库运行查询,以确保不是 PHP 会影响查询结果。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-04
  • 1970-01-01
  • 2018-11-19
  • 2014-03-04
  • 1970-01-01
相关资源
最近更新 更多