SELECT * FROM people WHERE user_id ='$ user_id'ORDER BY时间GROUP BY姓氏

时间:2011-08-31 09:49:48

标签: php mysql select group-by sql-order-by

我需要提取数据库中与某个user_id相关的所有条目,在它们输入数据库的时候(这是php unix time()秒)对它们进行排序,然后按姓氏对它们进行分组,以便他们坐着同姓的人。

这是到目前为止的查询..虽然它只给了我一定数量的条目。

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

使用ORDER和GROUP by的正确方法是什么,以便将所有结果按姓氏分组,但按输入的时间排序?感谢。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

ORDER BY子句应该是最后一个,但您必须指定要聚合的字段。

如:

SELECT surname, count(*) 
    FROM people 
    WHERE user_token='$user_token'
    GROUP BY surname
    ORDER BY surname
相关问题