gpt4 book ai didi

php - 连接 2 个 mysql 查询

转载 作者:太空宇宙 更新时间:2023-11-03 12:14:04 26 4
gpt4 key购买 nike

我有 2 个表:

用户

编号 |用户

喜欢

编号 |拥有者 |日期

这个查询:

$owner_result = $connector->query("SELECT id FROM users");
while($owner = $connector->fetchArray($owner_result))
{
$rs = $connector->query("SELECT count(id) AS num FROM likes
WHERE date > DATE_SUB(NOW(), INTERVAL 1 WEEK)
AND owner='$owner[id]'
ORDER BY num DESC LIMIT 5");
while($rw = $connector->fetchArray($rs))

{echo "This owner ($owner[id]) has $rw[num] likes this week";}

}

我想要做的是返回 5 users.id 行,其中行数在 likes 表中最大。我的查询只返回 $owner[id] 但不是每个人的点赞数。而且我认为我的查询的性能也很低,因为我的查询会检查 likes 表中每个 users.id 的喜欢数量,但可能是喜欢 < strong>table 不包含一些 users.id

任何解决我的问题或改进我的查询的建议都将非常受欢迎。谢谢。

最佳答案

我认为单个查询会为您提供指定的结果,例如:

SELECT u.id
, COUNT(t.owner) AS cnt_likes
FROM users u
JOIN likes t
ON t.owner = u.id
WHERE t.date > DATE_SUB(NOW(), INTERVAL 1 WEEK)
GROUP BY u.id
ORDER BY 2 DESC
LIMIT 5

likes 上的适当索引表应该提高性能:

... ON likes (owner, date)

或者,这将给出等效的结果,可能具有(稍微)更好的性能:

SELECT u.id
, t.cnt_likes
FROM users u
JOIN ( SELECT s.owner
, COUNT(1) AS cnt_likes
FROM likes s
WHERE s.date > DATE_SUB(NOW(), INTERVAL 1 WEEK)
GROUP BY s.owner
) t
ON t.owner = u.id
ORDER BY t.cnt_likes DESC
LIMIT 5

如果可以保证 owner 的所有值,您将获得更好的性能。 likes 中的列表实际上是id user 中的值表...因为您可以避免连接到用户表,并从 likes 中获取整个结果表:

SELECT s.owner
, COUNT(1) AS cnt_likes
FROM likes s
WHERE s.date > DATE_SUB(NOW(), INTERVAL 1 WEEK)
GROUP BY s.owner
ORDER BY cnt_likes DESC
LIMIT 5

但是,该查询不会检查以验证从 owner 返回的值列存在于 iduser 的专栏表。

关于php - 连接 2 个 mysql 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22970385/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com