@Sproot212

Как сделать сортировку SELECT FROM SELECT с последними состояниями устройств?

На сервис поступает информация о состоянии устройств. На главное странице необходимо выводить id с последним состоянием каждого устройства. Для этого используется следующая функция выборки:
function get_group_list(){
		$mysql_query = "
			SELECT * 
			FROM (SELECT * FROM `object_log` ORDER BY id DESC) as tmp
			WHERE 1
			GROUP BY `id_gsm` DESC
			ORDER BY `id_gsm` ASC
		";
		$res = mysql_query( $mysql_query );
		while ( $row = mysql_fetch_assoc($res) ){
			$data[$row['id']]['id_gsm']		= $row['id_gsm'];
			$data[$row['id']]['gps']		= $row['gps'];
			$data[$row['id']]['status']		= $row['status'];
			$data[$row['id']]['date']		= $row['date'];
		}
		return $data;
	}


В базу все поступает и при детализации видны последние состояния. Но на главной видно уникальное id и первое из поступивших состояний, а не последнее. В чем ошибка?
  • Вопрос задан
  • 175 просмотров
Решения вопроса 1
Melkij
@Melkij
PostgreSQL DBA
Ошибка в том, что так делать вообще нельзя. Даже этот странный mysql актуальный версий при дефолтном sql_mode откажется такое выполнять.

Если порядок событий допустимо считать по старшинству id:
select /**/ from `object_log`
    join (
        select max(id) as id 
            from `object_log`
            group by `id_gsm`
) lastevents using(id)
ORDER BY `id_gsm` ASC
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@noganno
web dev
попробуйте убрать ORDER BY `id_gsm` ASC
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы