1

私は自分のフォト ギャラリーに取り組んでおり、Wilson スコア間隔でメディアを並べ替えるフィルターを持っています。このスコアは、私のテーブルのフィールドに保存されますscore

このクエリでは、次のフィールドを使用します: id, UploadTime,score

私が抱えている問題は、複数の写真に親指が 1 つしかない場合、いくつかのスコアがまったく同じになることです。その場合、UploadDate フィールドでメディアを並べ替えて、古い画像の関連性を低くしたいと考えています。

これは、すべての写真を整理するためのスクリプトです (リストに入るには、スコアが 0 よりも高くなければならないことに注意してください)。

SELECT *
FROM photos
WHERE   status = 0 
    AND score > 0 
ORDER BY score DESC, id DESC

次に、次の画像を取得します (次の画像はスコアが低い画像です。スコアが等しい場合は、アップロードされた最新の画像が出力されます)。$id は現在の画像の一意の ID です

SELECT   *
FROM     photos p
INNER JOIN
    (
    SELECT score, id
    FROM photos
    WHERE id = ".$id."
    ) p2 ON p.score < p2.score

WHERE p.status = 0 AND p.net_votes > 0
ORDER BY p.score DESC, p.UploadTime DESC
LIMIT    1

これを行う方法についてのすべてのアイデアを使い果たしました。

4

1 に答える 1

1

完全にはわかりません(どこか>ではなくa を取得した可能性があります<)。うまくいけば、これはうまくいくでしょう

SELECT *
FROM   photos
WHERE  status = 0
       AND net_votes > 0
       AND ( score < (SELECT p1.score
                      FROM   photos p1
                      WHERE  p1.id = :id)
              OR uploadtime < (SELECT p2.uploadtime
                                  FROM   photos p2
                                  WHERE  p2.id = :id) )
ORDER  BY score DESC,
          uploadtime DESC
LIMIT  1 
于 2012-07-24T20:25:09.753 に答える