I have a dynamically generated site,
The pages (like Home, Contact…) have articles.
I store everything in SQL.
The question is:
How Should I sort the articles with an admin page?
example:
Homepage:
It has 3 article: News, Zzz, Test
In SQL the articles have “contentOrder”, News -> 1, Zzz ->2, Test->3,
If in the admin page, the user want the Zzz article to be the 1st, I do smthng like this:
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");
I simply swap the 2 articles “contentOrder”. But the problem is, the only way i can do this when the contentOrder is the primary key, coz i should move the whole row to do somthng, if it isnt a primary key, only the contentOrder gonna be changed.
I dont rly know how should i do this.(Should I make another table for the ContentOrder ?)
Sry for my bad english. :/
I am not sure if I understand your question correctly, but:
If you define the order of your data using the contentOrder column (which you update, to reflect this), you can simple select them using an “Order by” clause. You do not need the contentOrder column to be a Primary key (but you could include it in an index, so the data is already sorted correctly – it depends on your usage/data).
to change sorting you could generate a “bulk” update,
e.g.
if you want to move an item from contentOrder 3 to be the first one:
/// where 3 is the contentOrder of the item you wnat to move up and $newPosition is the new contentOrder
followed by an update of the existingRow you jsut moved,:
similar to this you can perform operations for other sort operations.
You can select the Top ‘x’ articles and order them by the contentOrder column (depending on your Database system you can do this with TOP/Limit clause).
E.g.:
You also can order the data ascending/descending, usually by adding ASC or DESC to the ORDER BY clause (not sure if this works for your database system).
I also would recommend to use Parameters for your queries, to avoid SQL Injection, and other possible problems.