1

クエリに問題があります。基本的にここでやろうとしていることは、最初に

item_info.content_time デスク

そして、

item_views.views の説明

私の意図は、最も多くのビュー (item_views.views desc) で最新のアイテム (item_info.content_time desc 順) を取得することです。本質的には、スタックオーバーフローのメインページのようなもので、最も多くのビューを持つ最新のものがあります (彼らがそれをどのように行っているかは本当にわかりません)。次のクエリは、1 つの基準または別の基準で項目を並べ替えます (基準による順序を逆にした場合)。これが私のコードです:

SELECT item_info.item_id, item_info.profile_id, item_info.tittle, item_covers.reference, usuarios.username, item_views.views
FROM item_info
LEFT JOIN item_covers ON item_covers.cover_id = item_info.book_id
LEFT JOIN usuarios ON item_info.profile_id = usuarios.id
LEFT JOIN item_views ON item_views.id = item_info.book_id
WHERE item_info.content_time
BETWEEN UNIX_TIMESTAMP( CURDATE( ) + INTERVAL -1
DAY )
AND UNIX_TIMESTAMP( CURDATE( ) + INTERVAL 1
DAY ) 
order by item_info.content_time desc, item_views.views desc

ざっくり・・・みたいな。

期待される出力:

content_time | ビュー

17:00 500
13:00 300
11:00 100
10:00 50

実際の出力:

content_time | ビュー

17:00 500
16:00 10
15:00 30
14:00 50

4

2 に答える 2

1

2 つの組み合わせが必要な場合は、両方を組み合わせた (おそらく追加の係数で重み付けした) 合計で構成される列を作成する必要がありますDATEDIFF(content_time,NOW())+views。DATEDIFF を使用することでcontent_time、 が数値型であり、 に追加できることを確認できますviews。示されている順序で引数を使用DATEDIFF()すると、過去の任意の s に対して負の数が得られ、それに応じcontent_timeて で結合された値が減少しますviews

したがって、クエリは次のように終了する必要があります

..
...
ORDER BY DATEDIFF(viewsitem_info.content_time,NOW())+viewsitem_info.views desc

DATEDIFF()日数差を与える。もう少し正確にしたいのかもしれません。その場合は、TIMESTAMPDIFF(MINUTE,viewsitem_info.content_time,NOW())代わりに使用することをお勧めします。

@Aaron: データ構造をまったく変更する必要はありません。必要に応じて、次のような重み係数を導入する必要があります

ORDER BY 
(0.123* TIMESTAMPDIFF(MINUTE,viewsitem_info.content_time,NOW()) 
      + viewsitem_info.view) DESC
于 2013-08-07T05:32:36.440 に答える
0

以下のようにクエリを書きます

SELECT item_info.item_id, item_info.profile_id, item_info.tittle, item_covers.reference,
usuarios.username, item_views.views FROM item_info
LEFT JOIN item_covers ON item_covers.cover_id = item_info.book_id
LEFT JOIN usuarios ON item_info.profile_id = usuarios.id
LEFT JOIN item_views ON item_views.id = item_info.book_id
WHERE item_info.content_time
BETWEEN UNIX_TIMESTAMP( CURDATE( ) + INTERVAL -1DAY )
    AND UNIX_TIMESTAMP( CURDATE( ) + INTERVAL 1
 DAY ) 
order by item_info.content_time,item_views.views desc

うまくいくと思います。

于 2013-08-07T05:54:59.163 に答える