2016-11-09 11 views
1

私は何千ものニュース記事の記録を持つテーブルを持っています。ウェブサイトには、無限のスクロールで記事を並べ替えるオプションのニュースリストページがあります。テーブルは次のようになります。人気度で記事を並べ替えるにはどうすればよいですか?

id | title | description | views | createdAt 

人気度を判断するためのキー列は、viewsとcreatedAtです。

人気度で記事を並べ替えるために実装できるアルゴリズムや式は何ですか?

現在、降順で並べ替えるだけですが、そのようにするとリストはほとんど更新されず、常に同じ記事が表示されます。

+0

私はこれが話題になっていると思います。おそらく、スーパーユーザーはもっと適切でしょうか? – Strawberry

+0

複数のオプションがあります:1番目 - http://tablesorter.com/docs/ osと同様のものを追加し、フロントエンドでテーブルをソートします。 2番目 - "?createdAt = desc"のようなリンクとしてヘッダに "query"パラメータを追加し、そのパラメータを読んで@WaleedAhmedのようなSQL呼び出しに追加してください。 – Peon

答えて

3

1つのアプローチは、記事をその年齢別に「ペナルティ」することです。たとえば、記事が公開されてから毎日、スコアを100(またはウェブサイトのトラフィック量に一致する他の任意の数)減らします。

order by views,createdAt 
+0

私の考えはプロジェクトで使うことができます。 – Ergec

+0

'createdAt = desc'だけで並べ替えてみませんか? – Peon

+0

@DainisAbolsの代わりに 'view's?セカンダリソート列として使用しますか? – Mureinik

0

はシンプルで、それを実行します。記事は、ゆっくりと押し出されると新しいものが見られるチャンスを得るでしょう。この方法で古いです「ラストビュー」と言ってください

アイデアは人気だけでなく最新の人気アイテムを印刷することです。

クエリでは、次の条件を指定できます。 select * from table where created> = 'recentDate1'、lastView> = 'recentDate2'あなたの必要性に基づいて。

毎回最新の日付をjQueryによって変更するだけで、有限の結果が得られます。無限ループ/結果を減らすことさえできます。

0

使用すると、1つの以上の列を持つことができます:それは働くことを願っています、と

SELECT * 
FROM  articles 
ORDER BY views - 100 * DATEDIFF(CURRENT_DATE, createdAt) DESC 
関連する問題