Php mysql-将两个表作为一对多关系进行右连接

Php mysql-将两个表作为一对多关系进行右连接,php,mysql,join,Php,Mysql,Join,我知道这个问题在这里已经问过很多次了,但毕竟我找不到我想要的答案 我的问题是: 我有两个表格,这些表格的结构如下: table1: item_id store title available shipping ------------------------------------------------------- 11 glasses .......................... 12 dresses

我知道这个问题在这里已经问过很多次了,但毕竟我找不到我想要的答案

我的问题是:

我有两个表格,这些表格的结构如下:

table1:

item_id      store      title    available    shipping
-------------------------------------------------------
11           glasses    ..........................
12           dresses    ..........................
.
.
.

table2:

item_id     review_rate    user_id    review_title
--------------------------------------------------
11           3              10023      good item
11           5              10024      nice item
12           1              10024      nice one
.
.
.
表1:
item\u id、店铺、标题、可用、发货

表2:
项目id、审核率、用户id、审核标题

这些表应作为一对多关系进行联接

例如,如果这些表中的数据如下所示:

table1:

item_id      store      title    available    shipping
-------------------------------------------------------
11           glasses    ..........................
12           dresses    ..........................
.
.
.

table2:

item_id     review_rate    user_id    review_title
--------------------------------------------------
11           3              10023      good item
11           5              10024      nice item
12           1              10024      nice one
.
.
.
然后,连接后的结果应如下所示:

afterJoin:

item_id   store   title   available   shipping   rate   people_reviewed
-----------------------------------------------------------------------
11        ....................................   4      2
12        ....................................   1      1
我尝试加入的
查询如下所示:

CREATE OR REPLACE VIEW afterJoin AS 
SELECT i.*,round(AVG(r.review_rate)) as rate,count(r.user_id) as people_reviewed 
   FROM table1 i 
   RIGHT JOIN  table2 r ON i.item_id = r.item_id

但是这只返回一行。

您的查询缺少
GROUPBY
子句。没有它,您的数据库将所有记录聚合在一起

SELECT i.*, round(AVG(r.review_rate)) as rate, count(r.user_id) as people_reviewed 
FROM table1 i 
    RIGHT JOIN  table2 r ON i.item_id = r.item_id
GROUP BY i.item_id

分组依据
指示db为每个
项目id
进行聚合。您的查询缺少一个
分组依据
子句。没有它,您的数据库将所有记录聚合在一起

SELECT i.*, round(AVG(r.review_rate)) as rate, count(r.user_id) as people_reviewed 
FROM table1 i 
    RIGHT JOIN  table2 r ON i.item_id = r.item_id
GROUP BY i.item_id

分组依据
指示db为每个
项\u id

聚合mysql不等于SQL Server感谢您改进我的错误您为什么在这里使用右连接?为什么不加入左派?当您使用右连接时,即使表1中的行不存在,您也将获得所有评论。这可能是好的,但大多数人认为是另一个方向。您需要所有项目及其评论(如果存在)。按照您编写此代码的方式,如果没有审阅,您将不会得到返回的项目。@SeanLange那么我该怎么办?我可能会使用左连接…就像我在前面的评论中所说的那样。这样一来,当有评论存在时,您可以从表1中获得每一行,并从表2中获得详细信息。mysql不等于SQL Server感谢您改进我的错误,为什么您在这里使用正确的连接?为什么不加入左派?当您使用右连接时,即使表1中的行不存在,您也将获得所有评论。这可能是好的,但大多数人认为是另一个方向。您需要所有项目及其评论(如果存在)。按照您编写此代码的方式,如果没有审阅,您将不会得到返回的项目。@SeanLange那么我该怎么办?我可能会使用左连接…就像我在前面的评论中所说的那样。这样,当有评论存在时,您可以从表1中获得每一行,并从表2中获得详细信息。谢谢,这一行解决了我的问题。这是你欠我的,你给了我重要的时间来解决我的问题,很高兴我能帮忙!谢谢你,这个解决了我的问题。这是你欠我的,你给了我重要的时间来解决我的问题,很高兴我能帮忙!