1

(最初 : 私はフランス語です。文法的な誤りがあれば申し訳ありません...)

私はテレビ番組のあるテーブルを持っています。1 つのクエリで、このテーブル内の番組を検索し、その結果を夜の番組の前日のすべての番組で並べ替えたいと考えています。

extract HOUR() の DATETIME 形式の日付を持つ入力名 fullDateStart があります。

私は研究でLEFT JOINを使用しています。ここで私の実際のリクエスト:

SELECT programId, programTitle, COUNT(*) AS score,
ROUND(startDate / 1000) AS start, ROUND(endDate / 1000) AS end
FROM people_appearances AS a
LEFT JOIN programsTable AS b ON a.programId = b.program_id
WHERE peopleId = :id AND timestamp > :twoWeeksAgo AND programId != 0
AND redif = 0 AND channel_id IN(1,2,3,5,6,7,8,9)
GROUP BY programId
ORDER BY score DESC, start DESC
LIMIT 0, 10

ここで UNION を試してみます:

SELECT * FROM (
    SELECT fullDateStart, programId, programTitle, COUNT(*) AS score1,
    ROUND(startDate / 1000) AS start, ROUND(endDate / 1000) AS end
    FROM people_appearances AS a
    LEFT JOIN db.epg_programs AS b ON a.programId = b.program_id
    WHERE HOUR(fullDateStart) > 6 AND HOUR(fullDateStart) <= 23
    AND peopleId = 826 AND timestamp > 1353420511000 AND programId != 0
    AND redif = 0 AND channel_id IN(1,2,3,5,6,7,8,9)
    GROUP BY programId

    UNION
    SELECT fullDateStart, programId, programTitle, COUNT(*) AS score2,
    ROUND(startDate / 1000) AS start, ROUND(endDate / 1000) AS end
    FROM people_appearances AS c
    LEFT JOIN db.epg_programs AS d ON c.programId =d.program_id
    WHERE HOUR(fullDateStart) >= 0 AND HOUR(fullDateStart) <= 6
    AND peopleId = 826 AND timestamp > 1353420511000 AND programId != 0
    AND redif = 0 AND channel_id IN(1,2,3,5,6,7,8,9)
    GROUP BY programId
    ) AS s3
ORDER BY score1 DESC,start DESC
LIMIT 0, 10 

誰かが私を助けてくれますか?(私は 2 つのリクエスト [昼用、夜用] でユニオンを試してみましたが、結果が 2 つのリクエストにあったとしても、結果を並べ替えることができませんでした...)

4

1 に答える 1

0

クエリの問題はorder by. すべてを最初にスコアで並べ替え、次に開始日で並べ替えます。

目標が 1 日ですべてを維持することである場合は、次のようにします。

order by score desc, date(fulldatestart),
         (case when hour(fulldatestart) between 7 and 23 then 1
               else 2
          end),
         hour(fulldatestart)

に 3 番目の句を追加したorder byので、同じスコアの番組は時間順に並べられます。

前日の早朝の時間を関連付けたい場合は、次のようにする必要があります。

order by score desc, date(fulldatestart - interval 7 hour),
         hour(fulldatestart - interval 7 hour)

(7時間を引くと、時間順に並べることができます。)

于 2012-12-04T14:46:14.523 に答える