2013-10-17 16 views
-1

使用一個共同的專欄中,我正在做一個Android項目..和m不是與平臺..熟悉並且排序三個表中的SQLite

我不得不使用公共列在我的數據庫3對錶進行排序..表詳情如下...

表位置 (字符串日期, 字符串一天, 字符串時, 字符串LOCATION_ADDRESS, 字符串緯度, 字符串經度, 長timeInMilli)

表呼叫 (字符串名稱, 字符串號碼, 字符串類型, 字符串日期, 字符串時間, 字符串持續時間, 長timeInMilli)

表SMS (字符串日期, 字符串時間, 字符串型, 字符串添加, 字符串接觸, 字符串子, 絃樂味精, 長timeInMilli)

我必須根據timeInMilli列排序這些表...

任何PLZ幫助我,,,我需要該代碼immeeediately作爲我的項目submsn日期是在十月二十三日... PLZ幫助我......謝謝提前...

+0

該操作的結果究竟應該如何顯示? –

+0

我需要一個表lyk這個作爲結果,表SORTED(ID,字符串call_or_sms_or_location,對應rowID,日期,timeinMilli)---- call_or_sms_or_location說它是否在調用表,位置表或短信表..對應的rowID,是電話或短信的ID或位置行... – nafi

+0

plz..oneone給我一個解決方案 – nafi

回答

0

我不一定知道SQLite中的語法差異,但我可以在Oracle中向您展示一個示例,但該概念將保持不變。

因此,我設置了您的數據的子集。表MLOCATION,MCALL和SMS。 MLOCATION包含日期,日期和timeinmilli。 MCALL包含姓名,號碼,日期和timeinmilli。 SMS包含日期,類型,消息和時間inmilli。所以正如你所注意到的,我必須在所有欄目中都有「timeinmlili」的共同點。

我所做的是根據timeinmilli的值合併列。您可以使用列標題指定所需的任何和所有值,然後使用timeinmilli選擇表並說「完全連接」,其中該值等於另一個表中的值。

select coalesce(l.MILLI, c.MILLI, s.MILLI) TIMEINMILLI, 
    l.DDAY D_DAY, 
    c.DNAME D_NAME, 
    c.NUM D_NUMBER, 
    s.DTYPE D_TYPE, 
    s.MSG MESSAGE 
from MLOCATION l full join MCALL c 
    on l.MILLI = c.MILLI full join SMS s 
    on c.MILLI = s.MILLI; 

這給我創建的表給我的輸出:

TIMEINMILLI D_DAY  D_NAME D_NUMBER D_TYPE MESSAGE 
1381730400000 Monday  Thatguy 4786217452 Type1 This is a message 
1381903200000 Wednesday Someone 4897414821 Type3 Word 
1381989600000 Thursday Nafi  1234567891 Type2 LOL 

您還可以看到我在SQLFiddle提供的完整的例子。請記住我在Oracle中這樣做過,但是您可以將數據庫類型更改爲SQLite以測試您自己的表和模式。

還給我最初指出這個方向的人豎起大拇指 - peterm

+1

您假定三個表中的記錄是相互關聯的。沒有共同時間戳的記錄將不會顯示。 –

+0

是的,這是事實。我想通過時間戳顯示一個簡單的結合數據的實例,之後他將更接近排序聯合數據。 – Signus

2

若要連接多個查詢的結果,請使用UNION ALL;結果的列名取自第一個子查詢:

SELECT rowid AS ID, 'call' AS c_or_s_or_l, date, timeInMilli FROM call 
UNION ALL 
SELECT rowid,  'SMS',     date, timeInMilli FROM SMS 
UNION ALL 
SELECT rowid,  'location',   date, timeInMilli FROM Location 
ORDER BY timeInMilli