【发布时间】:2019-11-08 15:22:46
【问题描述】:
我正在针对四个表设置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"))
我想要所有产品,无论是否有评论和图片
【问题讨论】:
-
您是否直接对数据库运行完整查询以确认您的代码中的某些内容没有过滤掉所需的行?
-
看起来很奇怪,左连接你得到更少的行......显示没有左连接的代码......
-
能否请你给我们看一个这个问题的例子,你可以在这里看到dbfiddle.uk/…这通常不是问题
-
很抱歉来晚了。 @Patrick Q 我已经对数据库运行了查询,但我不知道是什么过滤了结果。就像我之前提到的,一旦我取消了两个左连接子句,查询就会正常工作。
-
@scaisEdge 这里是没有左连接的代码,它按预期工作``` $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, p.location FROM content_type t INNER JOIN product p ON t.content_type_id=c.content_type_id AND p.active=1 ORDER BY RAND() LIMIT 8" ))```