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中获得详细信息。谢谢,这一行解决了我的问题。这是你欠我的,你给了我重要的时间来解决我的问题,很高兴我能帮忙!谢谢你,这个解决了我的问题。这是你欠我的,你给了我重要的时间来解决我的问题,很高兴我能帮忙!