2016-09-24 85 views
-2

我有一个小问题,当我把分组,以我的结果通过ID进行排序:MySQL的:顺序分组结果由ID

$get_seen_messages = mysql_query("SELECT * 
            FROM chat 
            WHERE userto='$login_cookie' 
            AND status='seen' 
            GROUP BY userfrom 
            ORDER BY id DESC"); 

请大家帮帮我:d

+1

每次你在新的使用[了'mysql_'(http://stackoverflow.com/questions/12859942/why-shouldnt-i-use-mysql-functions-in-php) 数据库扩展代码 ** [小猫被勒死在世界的某个地方](http://2.bp.blogspot.com/-zCT6jizimfI/UjJ5UTb_BeI/AAAAAAAACgg/AS6XCd6aNdg/s1600/luna_getting_strangled.jpg)**它被弃用,并已多年,并在PHP7中永远消失。 如果您只是学习PHP,请花些精力学习'PDO'或'mysqli'数据库扩展。 [从这里开始](http://php.net/manual/en/book.pdo.php) – RiggsFolly

+0

您的脚本处于[SQL注入攻击]风险中(http://stackoverflow.com/questions/60174/how -can-i-prevent-sql -injection-in-php) 看看发生了什么事[Little Bobby Tables](http://bobby-tables.com/)即使 [如果你是逃避投入,它的不安全!](http://stackoverflow.com/questions/5741187/sql-injection-that-gets-around-mysql-real-escape-string) 使用[prepared parameterized statements](http://php.net) /manual/en/mysqli.quickstart.prepared-statements.php) – RiggsFolly

回答

1

哪个id?你应该从来没有使用SELECT *GROUP BY。当您使用GROUP BY时,所有未集合的列应位于GROUP BY中。所以,这是一个正确形成查询

SELECT userfrom, MAX(id) as id 
FROM chat 
WHERE userto = '$login_cookie' AND status = 'seen' 
GROUP BY userfrom 
ORDER BY MAX(id) DESC; 

我怀疑,虽然,你想从聊天最近的行为每个userfrom。在这种情况下,正确形成的查询看起来像:

select c.* 
from chat c 
where userto = '$login_cookie' and status = 'seen' and 
     id = (select max(c2.id) 
      from chat c2 
      where c2.userto = c.userto and c2.status = c.status 
      ); 
0

您是否尝试过使用subquerys?

$get_seen_messages = mysql_query(" 
    SELECT * FROM 
     (SELECT * 
      FROM chat 
      WHERE userto='$login_cookie' 
      AND status='seen' 
      GROUP BY userfrom) as subquery 
    ORDER BY id DESC");