сначала показать новейшие изображения - таблицу без идентификатора или даты? - PullRequest
0 голосов
/ 28 января 2019

У меня есть эта таблица:

CREATE TABLE IF NOT EXISTS `profile_picture` (
  `user` int(11) UNSIGNED NOT NULL,
  `photo` varchar(400) NOT NULL,
  PRIMARY KEY (`user`),
  FOREIGN KEY (`user`) REFERENCES users (`id`)
);

Этот выбор сначала показывает мне самые старые сообщения, я хотел бы показать самые новые.но у меня нет идентификатора или даты строки.я могу это сделать?

SELECT p.user, p.photo, c.user from profile_picture p
join users c on c.id=p.user
limit 400

Ответы [ 2 ]

0 голосов
/ 01 марта 2019

Абсолютно правильно, что уже было объяснено (если у вас нет предложения ORDER BY, что порядок не определен, и это зависит от SQL-сервера, чтобы вернуть строки).

Однако, когда естьне предложение GROUP BY / ORDER BY, MySQL обычно возвращает значения в порядке их добавления.Поэтому вы можете попытаться немного взломать:

SELECT * FROM (
    SELECT (@i := @i + 1) AS i, table.* FROM table
) AS s
ORDER BY i DESC;

ВНИМАНИЕ: я не рекомендую вам использовать его.Это может или не может работать вообще в вашей системе.Он может перестать работать однажды

Я бы никогда не использовал его сам.Вместо этого я бы добавил столбец «вставленный TIMESTAMP DEFAULT CURRENT_TIMESTAMP».

0 голосов
/ 28 января 2019

Один из принципов реляционных баз данных состоит в том, что строки в таблице не имеют неявного порядка.Они представляют собой набор в математическом смысле .

Так что, если вы хотите запросить их в каком-то определенном порядке, вы можете сделать это только с помощью значений, хранящихся в каждой строке, и ссылки на них вORDER BY предложение.

Если у вас нет таблицы в его таблице, которую вы можете использовать для упорядочивания строк, то вы не можете упорядочить.

Как аналогия, если у вас есть стопкастраниц для вашей рукописи, без номеров страниц, и вы бросаете стопку на пол, удачи, приводя их в порядок.

...