2011-08-31 92 views
-6

我需要提取數據庫中與某個user_id相關的所有條目,在它們輸入數據庫之前排序(這是php unix time()秒),然後將它們按姓氏分組,以便它們與同一姓氏的條目坐在一起。

這是迄今爲止的查詢..雖然它只給了我一定數量的條目。

$sql = "SELECT * FROM people WHERE user_token='$user_token' 
     ORDER BY time GROUP BY surname"; 

什麼是爲了讓所有的姓氏進行分組,但下令結果的時候來使用ORDER和集團都輸入了正確的方法是什麼?謝謝。

+0

究竟意味着不工作?如果有兩個姓氏相同的人在不同的時間加入,那麼期望的輸出是什麼? –

+0

試圖看看是什麼錯誤使用mysql_error() –

+2

-1甚至沒有說明什麼問題 –

回答

0

ORDER BY子句應該是最後一個,但是您必須指定要彙總的字段。

如:

SELECT surname, count(*) 
    FROM people 
    WHERE user_token='$user_token' 
    GROUP BY surname 
    ORDER BY surname 
+0

這就是我正在尋找,雖然它似乎並沒有檢索所有條目..我只是得到其中之一姓。我認爲'count(*)'應該計算所有的姓氏?那麼你可以將它們全部分組並全部命令它們..? – Wez

3

你在你的SQL,語法,SQL注入漏洞,有一個錯誤,也許您正在使用過時的數據庫擴展。所以,這裏是什麼它應該是這樣的:

$dsn = "mysql:dbname=$db_name;host=$db_host"; 
try{ 
    $pdo = new PDO($dsn, $username, $password); 
} 
catch(PDOException $e){ 
    die($e->getMessage()); 
} 
$sql = "SELECT surname, count(id) FROM people WHERE user_token=:usr_token ORDER BY time GROUP BY surname"; 
$stmt = $pdo->prepare($sql); 
if ($stmt->execute(array(':usr_token'=>$user_token))){ 
    $result = $stmt->fetchAll(); 
} 
else{ 
    print_r($stmt->errorInfo()); 
    die("Error executing query"); 
} 

參考PDO manual的細節