2013-06-27 92 views
1

我對於使用SQL很新穎,所以我希望有人能指出我正確的方向來建立一個稍微複雜一些的查詢,而不是我以前需要使用的查詢。從PHP表中選擇行的子集

我代表了遊戲市場一個簡單的MySQL表,它看起來像這樣:(號碼的例子的目的後:

:目前我使用PHP加載此表

id seller price amount 
1 tom 330 100 
2 tom 370 500 
3 tom 400 750 
4 jerry 700 250 

$items = dbquery("SELECT * 
        FROM $marketdb 
        WHERE price=$minprice 
        ORDER BY amount;"); 

這很好,但我想要做的只是爲每個賣家加載一行:特別是,我想只加載每個賣家的「金額」最大值的行。上面的例子,這意味着結果將只包含最後兩行我在桌子上。

回答

1

您可以有一個子查詢,它可以爲每個賣家分別獲得最大的金額,並再次與該表一起加入以獲得額外的列。

SELECT a.* 
FROM tableName a 
     INNER JOIN 
     (
      SELECT seller, MAX(amount) amount 
      FROM tableName 
      GROUP BY seller 
     ) b ON a.seller = b.seller AND 
       a.amount = b.amount 

SELECT a.* 
FROM tableName a 
WHERE a.amount = 
     (
      SELECT MAX(amount) 
      FROM tableName b 
      WHERE a.seller = b.seller 
     ) 

兩個查詢將輸出

╔════╦════════╦═══════╦════════╗ 
║ ID ║ SELLER ║ PRICE ║ AMOUNT ║ 
╠════╬════════╬═══════╬════════╣ 
║ 3 ║ tom ║ 400 ║ 750 ║ 
║ 4 ║ jerry ║ 700 ║ 250 ║ 
╚════╩════════╩═══════╩════════╝ 
+0

太棒了,謝謝!現在我只需要解開內部連接的實際工作方式,下次我可以自己弄清楚^ _ ^。 – KBriggs

+0

其實,一個後續問題:如果最大的金額有重複的行(例如,如果湯姆賣出另一批750),那麼查詢將選擇兩者。我如何修改它以僅選擇其中之一?在內部查詢中添加LIMIT 1似乎沒有辦法。 – KBriggs