-2

現在、データベース内の行 (投稿) を人気順に並べ替えようとしている方法は、送信されたタイムスタンプを投稿のビュー数で割り、昇順で並べ替えることです。

私のテーブルは以下のようになります

ID      submitted             views

1  2013-09-03 15:14:05          1

2  2013-09-04 11:13:54          2

3  2013-09-05 18:14:13          3

4  2013-09-06 12:05:05          4

私が試してみました

SELECT * FROM posts ORDER BY SUM(unix_timestamp(submitted)/views) ASC LIMIT 30

ただし、40近くの投稿がある場合、結果は1つしかありません

sum関数なしでも試してみました

SELECT * FROM posts ORDER BY unix_timestamp(submitted)/views ASC LIMIT 30

しかし、これがしているように見えるのは、投稿を降順で表示するだけです.ASCを述べているので、これは本当に奇妙です.

PDOを使用している場合は、何らかの形で役立ちます。

4

3 に答える 3

0

クエリが正しく、データを正しく並べ替えているようです。タイムスタンプ列を参照してください。

SELECT *, unix_timestamp(submitted)/views As timestamp FROM posts ORDER BY 
unix_timestamp(submitted)/views ASC LIMIT 30;

このフィドルを参照してください http://sqlfiddle.com/#!2/8a8f4/11

ロジックを変更する必要があります。

于 2013-09-07T12:45:11.003 に答える
0

私の推測では、 と送信された時間の差をnow()ビューで割って並べ替えたいと思います。これは、単位時間あたりの平均ビュー数を大まかに測定したもので、私にとっては理にかなった測定値です。

ORDER BY (unix_timestamp(now()) - unix_timestamp(submitted)) / views ASC

これにより、閲覧頻度が最も高い投稿が返されます。

于 2013-09-07T12:42:06.533 に答える