Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Сортировка без первичного ключа

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
Еугений
Отправлено: 21 Августа, 2014 - 02:43:17
Post Id


Частый гость


Покинул форум
Сообщений всего: 176
Дата рег-ции: Апр. 2011  


Помог: 1 раз(а)




Привет, форумчане.
У меня есть таблица 'ratings' с тремя столбцами 'id_post' 'id_user' и 'ocenka'.
Пользователь голосует за пост, заносим его в бд, чтобы пресекать повторное голосование.
У каждого поста есть свой автор, и я хочу добавить возможность чтобы он мог узнать кто именно голосовал, и за какой именно его пост и какая оценка.

То есть нужно связать три таблицы posts,users и 'ratings'
как то так
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT users.login,ratings.ocenka,posts.title FROM posts,users,ratings WHERE ratings.id_post = posts.id AND ratings.id_users = users.id AND id_post = {id_моего_поста}

И мне бы хотелось, чтобы оценки выдавались так: новые - вверху, старые внизу. В таблице нет первичного ключа, а то я бы сделал order by id desc. Я поэкспериментировал, вставлял данные, но некоторые вставляются то в конец, то в начало, и в phpmyadmin смотрел и выводом на сайт.
(Добавление)
Решил, добавлю столбец data, и буду сортировать по нему, правда все старые записи будут с датой 0000-00-00 00:00:00.
Погуглил, нашел только один пост на форуме, там написали, что бд хранит добавляемые записи как ему угодно, и вывести без order by данные в нужном мне порядке не получится вроде как

(Отредактировано автором: 21 Августа, 2014 - 02:43:59)

 
 Top
Tyoma5891
Отправлено: 21 Августа, 2014 - 09:26:52
Post Id


Частый посетитель


Покинул форум
Сообщений всего: 621
Дата рег-ции: Авг. 2013  


Помог: 5 раз(а)




Еугений пишет:
бд хранит добавляемые записи как ему угодно

это почему это? последняя запись она и есть последняя там по времени фиксируется...
 
 Top
Мелкий Супермодератор
Отправлено: 21 Августа, 2014 - 10:15:09
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




Tyoma5891 пишет:
это почему это? последняя запись она и есть последняя там по времени фиксируется...

Потому что СУБД хранит данные так, как ей хочется.
innoDB банально кластеризован по первичному ключу. Данные строки физически находятся в том же самом месте, где записано значение первичного ключа этой строки.
Бардака существенно добавляет MVCC.
Время не фиксируется, оно не нужно. MVCC заставляет фиксировать id транзакции для каждой версии записи, но упорядоченные id транзакций совершенно не обязаны соответствовать временной хронологии.

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

Еугений пишет:
Решил, добавлю столбец data, и буду сортировать по нему, правда все старые записи будут с датой 0000-00-00 00:00:00.

Это верное решение. Только, date. data - немного о другом.


-----
PostgreSQL DBA
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Работа с СУБД »


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



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB