Забыли пароль?
Запросите новый здесь.

Автор темы: spocher102
ID темы: 2706
Информация:
Тема содержит 4 сообщения, была просмотрена 4873 раз.
Просмотр темы
PHP-Fusion Russia » Веб-разработка » MySQL
 Распечатать тему
Помогите написать запрос
spocher102
Это таблица сообщений:
itforums.ru/uploads/monthly_05_2016/post-27019-0-75978400-1463473577.png
Требуется получить idm для пользователя с id=2, при таких условиях:

- последнее сообщение по времени, между двумя пользователями.

т.е. на выходе должны получиться idm со значениями 11,10,9,8,7

сейчас пока додумал только такой запрос:

SELECT idm, time FROM message WHERE idfrom="2" OR idto="2" GROUP BY idfrom,idto ORDER BY 2

но он выдает idm со значениями 11,9,8,5,4,1.

То есть в результат попадают idm, которые идут первые по счету в таблице, и поля с (idfrom=2, idto=3) он воспринимает отдельно от (idfrom=3, idto=2).

Как выполнить запрос, что бы получить заданные первоначально условия?
 
Rush
SELECT idm, time FROM messages WHERE idfrom=2 OR idto=2 GROUP BY idfrom, idto ORDER BY time DESC

http://joxi.ru/Gr...
Изменил(а) Rush, 17.05.2016 12:34
 
Web
spocher102
Rush написал:

SELECT idm, time FROM messages WHERE idfrom=2 OR idto=2 GROUP BY idfrom, idto ORDER BY time DESC

http://joxi.ru/Gr...


Так то же самое выдает,
пришел к решению вопроса через следующий код:
Скачать исходники  Код
$sql ='SELECT DISTINCT idfrom as dfg,idto as dfg FROM message WHERE (idfrom="'.$_SESSION['id'].'" OR idto="'.$_SESSION['id'].'") ORDER BY idm ';
            $result = $pdo->query($sql);
            while ($row = $result->fetch())
            {
                    $idm[]=$row['dfg'];
            }
            $idm=array_unique($idm);
            $idm=array_values($idm);
            for($i=0;$i<count($idm);$i++)
            {
                    $sql ='SELECT idm FROM message WHERE idfrom="'.$_SESSION['id'].'" AND idto="'.$idm[$i].'" UNION SELECT idm FROM message WHERE idfrom="'.$idm[$i].'" AND idto="'.$_SESSION['id'].'" ORDER BY idm DESC LIMIT 1';
                    $result = $pdo->query($sql);
                    while ($row = $result->fetch())
                    {
                            $idmsa[]=$row['idm'];
                    }
            }
            rsort($idmsa);
            $shabl=implode(",",$idmsa);




Но, чувствую что можно проще и одним запросом обойтись, помогите плиз
 
Vveb--ws
я пишу через while когда несколько строк из БД и не думаю лишнее

и вообще у тебя это не Фужик. ты не из нашей секты !!!!
в нашей секте пишут так:
$all = dbquery("SELECT * FROM ".DB_PREFIX."el ORDER BY id DESC LIMIT 0, 50");
if (dbrows($all)) {
while ($g=dbarray($all)) {
echo $g['title']; // например
}
}


GROUP тут мне кажется не нужен.
Изменил(а) Vveb--ws, 18.05.2016 16:46
 
Web

Поделиться этой темой
Социальные закладки: Vkontakte Odnoklassniki Mail.ru Facebook Google Tweet This
URL:
BBcode:
HTML:

Перейти на форум:
Похожие темы
Топ 5 пользователей форума
Alex Alex (1,211)   Zaxap Zaxap (1,089)   Vova Vova (877)   Pisatel Pisatel (678)   util util (666)