有没有一种方法可以使用“内部联接”子句联接两个表,然后再使用多个“左联接”子句

时间:2019-11-08 15:22:46

标签: php mysql

我正在针对四个表设置mysql查询,我希望左边的结果对内部联接的查询不起作用。我做错了什么?原谅我的天真

这里的问题是,当我删除查询中的两个左联接时,我得到了预期的八个结果,但是即使产品表中有更多产品,查询中的左联接我也只有一个结果。

$this->getAllRecords("SELECT t.content_type_name as type, 
                        p.title,p.start_date, p.end_date, p.last_enroll_date, 
                        p.seat, p.cost, p.description, COUNT(r.stars) as review_count, 
                        AVG(r.stars) as stars, i.image, p.location 
                    FROM content_type t 
                        INNER JOIN product p ON t.content_type_id=c.content_type_id 
                        LEFT JOIN product_review r ON p.product_id=r.product_id 
                        LEFT JOIN image i ON p.uid=i.reference_page_or_product 
                            AND p.active=1 
                    ORDER BY RAND() 
                    LIMIT 8"))

我希望所有产品都有评论和图片

2 个答案:

答案 0 :(得分:1)

您正在使用分组功能,这可能会产生不可预测的结果(可能您使用的是5.7之前的mysql数据库版本)

汇总结果可能与空值有关,这也可以减少/忽略结果

您应该使用group by进行聚集功能,并使用子查询获取相关的有效结果..并将子查询用于左联接

add_btn.clicked.connect(
    (lambda checked,
            model=model,
            attrs=attrs,
            title=title,
            model_instances_list = model_instances_list :
        self._add_model_instance_action(model, attrs, title, model_instances_list)))

为获得更好的视图,应将p.active = 1分配给产品的on子句

答案 1 :(得分:-1)

有关连接的正确嵌套和使用括号的信息,请参见本页:https://dev.mysql.com/doc/refman/8.0/en/nested-join-optimization.html

但是SQL中存在一个错误,应该将其表示为WHERE:

SELECT t.content_type_name as type, p.title,p.start_date, p.end_date, p.last_enroll_date, 
        p.seat, p.cost, p.description, COUNT(r.stars) as review_count, 
        AVG(r.stars) as stars, i.image, p.location 
  FROM content_type t 
       INNER JOIN product p ON t.content_type_id=c.content_type_id 
             LEFT JOIN product_review r ON p.product_id=r.product_id 
             LEFT JOIN image i ON p.uid=i.reference_page_or_product 
  

AND p.active = 1

  ORDER BY RAND()