2016-09-24 1 views
-2

У меня есть небольшая проблема сортировки моих результатов по идентификатору, когда я помещаю сгруппированные: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 Injection Attack] (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) Используйте [подготовленные параметризованные утверждения] (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. В этом случае правильно сформированный запрос выглядит следующим образом:

0

Вы пробовали с подзапросами?

$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");