2010-04-29 113 views
0

所以我使用了以下內容:MySQL查詢問題,笨

$r = new Record(); 
    $r->select('ip, count(*) as ipcount'); 
    $r->group_by('ip'); 
    $r->order_by('ipcount', 'desc'); 
    $r->limit(5); 

    $r->get(); 

    foreach($r->all as $record) 
    { 
     echo($record->ip." "); 
     echo($record->ipcount." <br />"); 
    } 

標準:

SELECT `ip`, count(*) as ipcount FROM (`soapi`) GROUP BY `ip` ORDER BY `ipcount` desc LIMIT 5; 

,我只得到了最後(第五)記錄echo'ed並沒有ipcount呼應。

有沒有不同的方法來解決這個問題?我正在學習DataMapper(因此提出問題)並需要弄清楚一些。我並沒有把我的頭圍繞整個ORM的東西。

有沒有辦法設置count(*) as ipcount沒有有趣的select()聲明?我不認爲這是由於某種原因觸發的。這也可能是DataMapper中的一個錯誤,但我不太確定。

而且我發現,即使我用$r->query()方法不除最後一項,如果我使用類似SELECT IP FROM soapi WHERE 1;返回任何東西。但是,如果我說SELECT * FROM soapi WHERE 1;,它將返回所有內容(如它應該)。如果它沒有*它只會返回最後一行。

剛剛通過新查詢進行驗證,除選擇所有列(*)之外的任何內容僅返回最後一條記錄。任何幫助,這將是偉大的。您可以編寫一個類似select *, count(*) as ipcount的聲明,但您仍然無法通過$record->ipcount訪問該聲明。

+0

你怎麼知道這是它的第五個記錄?您能否以標準SQL格式發佈您的查詢? – 2010-04-29 03:16:19

+0

添加了標準格式,我知道這是第五種,因爲如果我通過輸出運行標準查詢,則與查詢結果的最後一項相同。 – 2010-04-29 03:22:48

回答

0

對於你的情況,一旦你在MySQL中使用COUNT()函數,它將只返回1個值。因此你ip結果數據不會顯示出來。

我建議你只是拆分這2個查詢。 1.對於COUNT(*) 2.對於ip

希望得到這個幫助。