Php 如何将这两个MySQL查询连接在一起

Php 如何将这两个MySQL查询连接在一起,php,mysql,sql,subquery,Php,Mysql,Sql,Subquery,我有一个疑问,这会吸引一些产品,有很多产品,这个列表将会增长 SELECT pid, link, created_at FROM products ORDER BY timestamp DESC 但我还有另一个表,其中包含pid和rating字段,pid是到products表的链接 SELECT AVG(rating) FROM ratings GROUP BY pid 我如何查询,以便它能提取如下信息 products.pid, products.link, products.create

我有一个疑问,这会吸引一些产品,有很多产品,这个列表将会增长

SELECT pid, link, created_at FROM products ORDER BY timestamp DESC
但我还有另一个表,其中包含
pid
rating
字段,
pid
是到products表的链接

SELECT AVG(rating) FROM ratings GROUP BY pid
我如何查询,以便它能提取如下信息

products.pid, products.link, products.created_at, AVG(ratings.rating)

在MS-SQL中,可以选择以下选项:

SELECT p.pid, 
       p.link, 
       p.created_at, 
       (SELECT AVG(rating) FROM ratings r where r.pid = p.pid) as rating
  FROM products p
 ORDER BY timestamp DESC

在MySQL中,这应该给出您想要的结果

选择p.pid、p.link、p.created\u at、AVG(r.rating)评级
来自产品p
左联接
在p.pid=r.pid上
p.pid分组;

顺便说一句,MySQL很特别,因为它允许您执行不完整的
groupby
查询,所以如果您想在另一个数据库上运行它(或者出于风格原因),那么应该改为使用该查询

选择p.pid、p.link、p.created\u at、AVG(r.rating)评级
来自产品p
左联接
在p.pid=r.pid上
按p.pid、p.link、p.创建的组(位于);

当我使用上面的其他帖子时,它总是向我显示以下错误:

'Unknown column "timestamp" in "order clause"'
我认为时间戳被添加到products表中的created_at列中。因此,我在本专栏中使用了排序。它将从产品表中选择最后一行,并用它打印平均值(评级)


这个查询经过测试,对我来说运行良好。

问题是关于MySQL,而不是MSSQL。下面是mysql中的另一个例子。两者都是基于SQL的,这样的通用概念通常是可转移的。查询可能需要一些调整,但也存在于MySQL中。概念通常相同,但细节可能不同。不知道如何编写简单连接的人可能无法进行转换。此外,性能问题各不相同,因此首选的方法非常依赖于数据库。我同意每个SQL数据库系统都有不同的标准实现。但在这种情况下,解决方案确实起了作用。更好的解决方案是在上面使用内部联接而不是子选择。如果在我的答案中使用子查询方法,还可以避免不完整的
groupby
。我认为它可能更有效,因为在连接之前进行分组意味着来自连接的临时表更小。
'Unknown column "timestamp" in "order clause"'
SELECT products.pid, products.link, products.created_at, AVG(ratings.rating)
FROM products, ratings
WHERE products.pid = ratings.pid
GROUP BY products.pid
ORDER BY products.created_at ASC
;