我正在针对四个表设置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"))
我希望所有产品都有评论和图片
答案 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()