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");)

だから私が正確に望むのは、これが同じアイテムテーブルと同じ列数から2番目のアイテム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

このクエリは少し奇妙です。最初に1 つの合計を選択し (何もグループ化していません)、その合計で並べ替え、返される行数を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 に答える