PHP,排序文章


PHP, Sorting Articles

我有一个动态生成的网站,
这些页面(比如主页、联系人……)都有文章。
我将所有内容存储在SQL中。
问题是:
我应该如何对有管理页面的文章进行排序?
例子:
主页:
它有3篇文章:新闻,Zzz,测试
在SQL中,文章有"contentOrder",News -> 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");

我只是交换了两篇文章"contentOrder"。但问题是,当contentOrder是主键时,我唯一能做到的是,因为我应该移动整行来做点什么,如果它不是主键,只有contentOrder会被改变。

我真的不知道我该怎么做。(我应该为ContentOrder创建另一个表吗?)

对不起,我的英语不好。:/

考虑如果您尝试将第八篇文章作为第一篇文章会发生什么。目前排名第一的文章应该成为第二,第二的文章应该成为第三,以此类推。所以比起切换两个contentOrder值,你实际上需要更新其余的值来匹配。

考虑到这一点,我的解决方案是查询所有文章,对它们进行排序,然后用新的顺序更新数据库中的所有行。如果您可以在存储过程中做到这一点,或者不需要在PHP中进行所有这些查询,那么这可能是更可取的。

希望我能更好地解释这一点:

你有你的起始内容顺序(格式为[文章ID,内容顺序]):

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

你现在想让你的文章ID为4的第一篇文章,所以你的列表将成为

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

我不确定我是否正确理解你的问题,但是:如果您使用contentOrder列定义数据的顺序(您需要更新该列以反映这一点),则可以使用"order by"子句简单地选择它们。您不需要将contentOrder列作为主键(但您可以将其包含在索引中,因此数据已经正确排序-这取决于您的用法/data)。

要更改排序,你可以生成"批量"更新,如。如果你想把一个条目从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

您还可以对数据进行升序/降序排序,通常通过在order by子句中添加ASC或DESC(不确定这是否适用于您的数据库系统)。我还建议在查询中使用参数,以避免SQL注入和其他可能的问题。