2013-03-14 28 views
0

我有兩個單獨的日曆:reservation_schedule和maintenance_schedule日曆。 Reservation_schedule從預定表和maintenance_schedule獲取維護表中的數據。我的目標是將兩個日曆中提取的數據放到一個日曆中。PHP日曆使用聯合或多個查詢

這裏是我用於reservation_schedule查詢:

SELECT acode 
FROM reservation 
WHERE month(etd) = '".$month."' 
AND dayofmonth(etd) = '".$dayArray["mday"]."' 
AND year(etd) = '".$year."' 
ORDER BY etd 

而對於maintenance_schedule:

SELECT DISTINCT s.reg AS 'reg', 
        a.date AS 'date' 
    FROM (SELECT Curdate() 
        + INTERVAL (a.a + (10 * b.a) + (100 * c.a)) day AS Date 
      FROM (SELECT 0 AS a 
        UNION ALL SELECT 1 
        UNION ALL SELECT 2 
        UNION ALL SELECT 3 
        UNION ALL SELECT 4 
        UNION ALL SELECT 5 
        UNION ALL SELECT 6 
        UNION ALL SELECT 7 
        UNION ALL SELECT 8 
        UNION ALL SELECT 9) AS a 
        CROSS JOIN (SELECT 0 AS a 
           UNION ALL SELECT 1 
           UNION ALL SELECT 2 
           UNION ALL SELECT 3 
           UNION ALL SELECT 4 
           UNION ALL SELECT 5 
           UNION ALL SELECT 6 
           UNION ALL SELECT 7 
           UNION ALL SELECT 8 
           UNION ALL SELECT 9) AS b 
        CROSS JOIN (SELECT 0 AS a 
           UNION ALL SELECT 1 
           UNION ALL SELECT 2 
           UNION ALL SELECT 3 
           UNION ALL SELECT 4 
           UNION ALL SELECT 5 
           UNION ALL SELECT 6 
           UNION ALL SELECT 7 
           UNION ALL SELECT 8 
           UNION ALL SELECT 9) AS c) a 
      INNER JOIN maintenance_sched s 
        ON a.date >= s.date_from 
         AND a.date <= s.date_to 
    WHERE Month(date) = '".$month."' 
      AND Dayofmonth(date) = '".$dayArray["mday"]."' 
      AND Year(date) = '".$year."' 

我可以用UNION顯示從他們兩人的數據,但我想從數據維護表以帶刪除線的字符串形式輸出。我輸出的查詢結果在此代碼:

$chkEvent_res = mysql_query($chkEvent_sql) or die(mysql_error()); 

     if (mysql_num_rows($chkEvent_res) > 0) { 
      $event_title = "<br/>"; 
      while ($ev = mysql_fetch_array($chkEvent_res)) { 
       $event_title .= stripslashes($ev["reg"])."<br/>"; 
       //$event_title .= "<del>".stripslashes($ev["acode"])."</del><br/>"; 
      } 
      mysql_free_result($chkEvent_res); 
     } else { 
      $event_title = ""; 
     } 

如果我用UNION查詢,我無法從維護設置輸出字符串有刪除線,因爲它運行查詢一次。我怎樣才能實現從維護表獲取的數據輸出刪除線?我應該去UNION的一個查詢嗎?如果我這樣做,我該如何區分來自維護表和預定表的數據?如果我分開查詢,我該如何運行它?它應該像$chkEvent_res = mysql_query($chkEvent_sql1) and mysql_query($chkEvent_sql2) or die(mysql_error());?請幫忙,謝謝。

回答

0

這兩個查詢的UNION的唯一方法是,如果每個查詢中的列數相同,並且每列的數據類型相同。不確定涉及的數據類型 - 從第一個查詢返回「acode」,從第二個查詢返回「reg」和「date」。

假設你實際上可以UNION你的結果,並得到你所需要的,你可以考慮增加一個額外的列到你的結果,返回查詢的來源:

SELECT Field1, Field2, Field3, 'Table1' Source 
FROM TABLE1 
... 
UNION 
SELECT Field1, Field2, Field3, 'Table2' Source 
FROM Table2 
... 

的,你可以使用源列相應地設定您的結果。

下面是關於使用UNION一些額外的信息:

http://dev.mysql.com/doc/refman/5.0/en/union.html