2014-01-07 57 views
0

我在這方面遇到了一些麻煩,我發現如何從多個列中獲取唯一值,並且我知道如何正常排序,但我無法看到混合兩個從MySQL表中取出唯一值並按出現次數排序

原來的SQL語句是在這裏:

$sql="SELECT DISTINCT UserID, UserIP FROM Visits WHERE PageID='".$_GET['p']."'"; 

它只是變得的其中兩個值是唯一的第一個實例,這樣的「mysql_numrows」的事情是行不通的。

這是從獲取數組循環中,它可以指望罰款事件,但在這一點上有點來不及整理

$sql5="SELECT Date, VisitID FROM Visits WHERE PageID='".$_GET['p']."' AND UserID='".$userid."' AND UserIP='".$userip."' ORDER BY Date"; 
$result5 = mysql_query($sql5); 
$num5 = mysql_numrows($result5); 

基本上,它應該得到基於兩列唯一值,算多少次出現,排序算的話,可能還排序最高匹配日期如有可能

任何建議將是巨大的,歡呼:)
而且它只是一個個人網站,我沒有實際對信息做任何事情,只是試圖學習更多的PHP

回答

1

嘗試使用GROUP BY,像這樣:

SELECT UserID, UserIP FROM Visits 
WHERE PageID = ### 
GROUP BY UserID, UserIP 
ORDER BY COUNT(*) DESC, max(`Date`) DESC 
+0

啊啊非常感謝,似乎工作得很好。有一個問題,還有另一個名爲'date'的列,我稍微修改了你的代碼以包含這個,並且將它添加到最後說'ORDER BY COUNT(*)DESC,Date DESC'。它雖然沒有做任何事情,但我猜是因爲count(*)部分,我究竟會如何工作? – Peter

+0

@Peter如果您使用「GROUP BY」,則不能簡單地使用一個列值。你必須使用像MAX這樣的分組功能。請參閱上面我更新的答案。 –

+0

啊是啊,這是有道理的,從來沒有做過這樣的事情,但至少我現在知道,歡呼的幫助:) – Peter

1

請更改您的查詢像

$sql = "SELECT UserID, UserIP FROM Visits 
WHERE PageID = '".$_GET['p']."' 
GROUP BY UserID, UserIP 
ORDER BY COUNT(UserID) DESC"; 

讓我知道如果你有所幫助。

謝謝

+0

嘿謝謝,它確實工作正常,雖然我似乎無法按日期排序結果(所以任何具有相同計數的日期值都會被排序),只需調整選擇部分並添加',Date DESC'到最後不起作用,您是否會知道如何執行此操作?歡呼:) – Peter

+0

你可以請粘貼查詢在這裏,所以,我檢查什麼看起來,你想要的日期DESC? –

相關問題