PHP, сортировка статей - PullRequest
       15

PHP, сортировка статей

0 голосов
/ 08 августа 2011

У меня динамически генерируемый сайт,На страницах (например, Дом, Контакты ...) есть статьи.Я храню все в SQL.Вопрос в том:Как мне отсортировать статьи на странице администратора?пример:Домашняя страница:Имеет 3 статьи: Новости, Zzz, ТестВ SQL статьи имеют «contentOrder», Новости -> 1, Zzz -> 2, Test-> 3,Если на странице администратора пользователь хочет, чтобы статья Zzz была первой, я делаю что-то вроде этого:

        mysql_query('UPDATE pagescontent SET contentOrder=0 WHERE contentOrder='.$aktOrder);
        mysql_query("UPDATE pagescontent SET contentOrder=$aktOrder WHERE contentOrder=$aktOrderUp");
        mysql_query("UPDATE pagescontent SET contentOrder=$aktOrderUp WHERE contentOrder=0");

Я просто поменял 2 статьи "contentOrder".Но проблема в том, что единственный способ, которым я могу сделать это, когда contentOrder является первичным ключом, потому что я должен переместить всю строку, чтобы выполнить somthng, если это не первичный ключ, будет изменен только contentOrder.

Я не знаю, как мне это сделать. (Должен ли я сделать другую таблицу для ContentOrder?)

Прошу прощения за мой плохой английский.: /

Ответы [ 2 ]

1 голос
/ 08 августа 2011

Подумайте, что произойдет, если вы попытаетесь сделать 8-ю статью первой.Статья, которая в настоящее время первая, должна стать второй, вторая стать третьей и так далее, и так далее.Поэтому вместо того, чтобы переключать два значения contentOrder, вам нужно обновить остальные из них, чтобы они соответствовали.

Учитывая это, мое решение будет заключаться в том, чтобы запросить все статьи, отсортировать их, а затем обновить все строкив базе данных с новым заказом.Если вы можете сделать это в хранимой процедуре или иным образом без выполнения всех этих запросов в PHP, это может быть предпочтительнее.

Надеюсь, я могу объяснить это лучше с помощью этого:

У вас естьначальный порядок содержимого (в формате [идентификатор статьи, порядок содержимого]):

[1, 1], [2, 2], [3, 3], [4, 4]

Теперь вы хотите сделать свой идентификатор статьи 4 первой статьей, чтобы ваш список стал

[1, 2], [2, 3], [3, 4], [4, 1]
0 голосов
/ 08 августа 2011

Я не уверен, правильно ли я понимаю ваш вопрос, но: если вы определяете порядок ваших данных с помощью столбца contentOrder (который вы обновляете, чтобы отразить это), вы можете просто выбрать их, используя предложение «Order by»,Вам не нужно, чтобы столбец contentOrder был первичным ключом (но вы можете включить его в индекс, поэтому данные уже отсортированы правильно - это зависит от вашего использования / данных).

, чтобы изменить сортировку, которую вы могли бысоздайте «массовое» обновление, например, если вы хотите переместить элемент из contentOrder 3, чтобы он был первым:

update pagescontent set contentOrder = contentOrder - 1 where contentOrder > 3 and contentOrder <= $newPosition

///, где 3 - это contentOrder элемента, который вы хотите переместить вверх, и$ newPosition - это новый contentOrder, за которым следует обновление существующей строки, которую вы только что переместили:

update pagescontent set contentOrder = $newPosition where id = $idOfRecordToMoveUp

аналогично этому вы можете выполнять операции для других операций сортировки.

Вы можете выбрать Top'x' статьи и упорядочите их по столбцу contentOrder (в зависимости от вашей системы баз данных вы можете сделать это с помощью предложения TOP / Limit).Например:

SELECT * FROM pagescontent ORDER BY contentOrder

Вы также можете упорядочить данные по возрастанию / убыванию, обычно добавляя ASC или DESC к предложению ORDER BY (не уверен, работает ли это для вашей системы баз данных).Я также рекомендовал бы использовать параметры для ваших запросов, чтобы избежать SQL-инъекций и других возможных проблем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...