(最初 : 私はフランス語です。文法的な誤りがあれば申し訳ありません...)
私はテレビ番組のあるテーブルを持っています。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 つのリクエストにあったとしても、結果を並べ替えることができませんでした...)