0

我有一个问题,我是新来的。

我有一个名为“项目”的表,并且有 ID 列和计数列,我还有一个字符表,它是项目 ID 的所有者

我这里有一个有效的代码..并显示项目的顶部字符及其计数..解释更多..

"SELECT SUM(it.count) FROM characters ch  
LEFT OUTER JOIN items it ON ch.charId=it.owner_id
WHERE item_id=40001 ORDER BY SUM(it.count) DESC LIMIT 20");)

所以我真正想要的是让它从相同的项目表和相同的列数中获取第二个项目ID的列表......

任何人都可以帮助我吗?

4

1 回答 1

2

首先,让我让您的查询更具可读性:

SELECT SUM(it.count)
FROM characters ch 
LEFT OUTER JOIN items it ON ch.charId=it.owner_id 
WHERE item_id=40001 
ORDER BY SUM(it.count) DESC 
LIMIT 20

这个查询有点奇怪。首先,您选择一个总和(您没有按任何分组)然后您按该总和排序,并将返回的行数限制为20

此外,您正在执行LEFT OUTER JOIN但随后使用表中的外部表WHERE,这会导致删除所有只有一个字符但没有项目的行。

以下查询将执行完全相同的操作。

SELECT SUM(it.count)
FROM characters ch 
JOIN items it ON ch.charId=it.owner_id 
WHERE item_id=40001 

现在,如果您想要多个 item_id,您要么想要两者的总数:

SELECT SUM(it.count)
FROM characters ch 
JOIN items it ON ch.charId=it.owner_id 
WHERE item_id IN (40001,40002)

或者你想要每个项目的总和

SELECT SUM(it.count)
FROM characters ch 
JOIN items it ON ch.charId=it.owner_id 
GROUP BY item_id
ORDER BY SUM(it.count) DESC 
LIMIT 20

您可以将 JOIN 更改为仅执行几种项目类型:

SELECT SUM(it.count)
FROM characters ch 
JOIN items it ON ch.charId=it.owner_id AND it.item_id IN (40001,40002)
GROUP BY item_id
ORDER BY SUM(it.count) DESC 
LIMIT 20
于 2013-03-31T00:15:24.577 回答