以下のSQL文では、結果が順不同で返されます。彼らが昇順または降順であった場合、それは理にかなっていますが、ここには順序がないようです。ORDER BYの問題がサブ選択で正しくソートされない
ORDER BY関数が 'date'エイリアスでソートされていない理由についての洞察は非常に高く評価されます。
SQL文:
SELECT id, date, type
FROM (SELECT resume_id AS id, DATE_FORMAT(date_mod, '%M %e, %Y') AS date, 'resume' AS TYPE
FROM resumes
WHERE user_id = '$user_id'
UNION ALL
SELECT profile_id, DATE_FORMAT(date_mod, '%M %e, %Y') AS date, 'profile'
FROM profiles
WHERE user_id = '$user_id'
ORDER BY date DESC LIMIT 5) AS d1
ORDER BY date
結果:
Resume was updated on February 14, 2012
Resume was updated on February 15, 2012
Resume was updated on February 15, 2012
Resume was updated on February 9, 2012
Profile was updated on February 9, 2012
内部クエリが日付FIELDではなく日付STRINGを返しているため、正しくソートされています。 –
あなたは小さなバグのように見えますが、おそらく重要ではありませんが、それでも指摘する価値があります。最初の内部クエリで 'resume_id AS id'を選択していますが、2番目のクエリでは' profile_id'だけを選択しています。これは 'profile_id AS id'でなければなりません。あなたの場合、あなたはIDを使用していないので、それは問題ではありませんが、IDを使用して終了した場合、行の下の迷惑なバグかもしれません。 2番目のクエリでは、 '' profile ''の代わりに '' profile''を選択するだけです。 (私が投稿した答えでこれらの修正を行いました) –