2014-03-18 66 views
1

有點泡菜,我有一個複雜的查詢返回2個結果,這是罰款和丹迪,但我想修改查詢,以便它合併2並返回1結果。我想知道這是否可能。這個例子,我有:將2個結果合併爲1使用SQL

SELECT s.f_Name s.l_Name, t.tour_Name, o.order_Placed, s.staff_ID, t.tour_ID, d.date 
     FROM Staff_Day AS d, Tour as t, Staff AS s, Customers AS c 
     JOIN Orders AS o ON c.customer_ID = o.order_No 
     WHERE c.date >= '2014-03-18 00:00:00' AND c.date <= '2014-03-19 23:59:59' 
     AND d.tour_ID = c.trip_Taken 
     AND t.tour_ID = d.tour_ID 
     AND d.date = c.date 
     AND d.staff_ID = s.staff_ID 
     ORDER BY d.staff_ID ASC 

這將返回2分的結果:

enter image description here

我想將它合併到1分的結果,因此有以下欄目:

f_Name1, l_Name1, f_Name2, l_Name2, tour_Name, 
order_Placed1, order_Placed2, staff_ID1, staff_ID2, 
tour_ID1, tour_ID2, staff_Day_Date1, staff_Dat_Date2 
+1

你在運行這個數據庫? –

+6

在PHP中處理這兩行可能更好,以創建您要查找的數據。如果需要處理兩行以上的數據,SQL會非常快速地變得混亂。 – user113215

+1

這兩行有什麼共同點?你可以自己加入表格(或者將它加倍作爲子選擇),並且可以得到你想要的東西。我在我們的股票交易表格上做了類似的查詢,並且自己加入了一個交易表格,以獲得單行的買入和賣出詳情。但我同意這不適用於任意數量的連接。 – Danny

回答

1

是,可以在MySQL中執行此操作。 ...

你做不是想要做到這一點。

這將更好地處理PHP的程序邏輯。取出兩行,然後將它們組裝成所需的輸出。

作爲示範,有可能在MySQL:

SELECT t.* 
    FROM (SELECT @prev_fee   AS fee_r1 
       , @prev_fee := s.fee AS fee_r2 
       , @prev_fi   AS fi_r1 
       , @prev_fi := s.fi AS fi_r2 
       , @prev_fo   AS fo_r1 
       , @prev_fo := s.fo AS fo_r2 
      FROM (
        SELECT 'a' AS fee, '1' AS fi, 'apple' AS fo 
        UNION ALL 
        SELECT 'c','3','cat' 
        UNION ALL 
        SELECT 'e','5','egg' 
        UNION ALL 
        SELECT 'b','2','bad' 
        ORDER BY 1 
       ) s 
      CROSS 
      JOIN (SELECT @prev_fee := NULL 
         , @prev_fi := NULL 
         , @prev_fo := NULL 
       ) i 
      LIMIT 2 
     ) t 
LIMIT 1,1 

原始查詢將代替別名爲s線視圖查詢。您需要爲查詢返回的每個列定義用戶變量,並使用這些變量「保存」上一行中的值。

在內聯視圖別名爲t的情況下,在將用戶變量設置爲當前行的值之前,先前行中保存的值將需要出現在SELECT列表中。如果您需要對列進行重新排序,則需要在最外層查詢中執行此操作。