2015-02-08 95 views
1

如何從此查詢中刪除重複?優化查詢重複

SELECT 
    *, UNIX_TIMESTAMP(
     STR_TO_DATE(
      CONCAT(
       IFNULL(expected_release_day, 1), 
       ' ', 
       IFNULL(
        expected_release_month, 
        IFNULL(
         3 * expected_release_quarter, 
         1 
        ) 
       ), 
       ' ', 
       expected_release_year 
      ), 
      '%d %m %Y' 
     ) 
    ) calc 
FROM 
    games 
WHERE 
    expected_release_year > 0 && UNIX_TIMESTAMP(
     STR_TO_DATE(
      CONCAT(
       IFNULL(expected_release_day, 1), 
       ' ', 
       IFNULL(
        expected_release_month, 
        IFNULL(
         3 * expected_release_quarter, 
         1 
        ) 
       ), 
       ' ', 
       expected_release_year 
      ), 
      '%d %m %Y' 
     ) 
    ) > UNIX_TIMESTAMP(NOW()) 
ORDER BY 
    calc 

回答

1

的一種方法是使用子查詢

SELECT *,calc FROM 
(
    SELECT *, UNIX_TIMESTAMP(
     STR_TO_DATE(
      CONCAT(
       IFNULL(expected_release_day, 1), 
       ' ', 
       IFNULL(
        expected_release_month, 
        IFNULL(
         3 * expected_release_quarter, 
         1 
        ) 
       ), 
       ' ', 
       expected_release_year 
      ), 
      '%d %m %Y' 
     ) 
    ) calc 
FROM 
    games)x 
WHERE 
    expected_release_year > 0 && calc > UNIX_TIMESTAMP(NOW()) 
ORDER BY 
    calc