2

以下は、SQL SERVER で正常に動作します。しかし、PhoneGap アプリケーションの SQLite でクエリを動作させることができません。

シナリオは次のとおりです。

テーブルには、発信者/着信者の電話番号とテキスト メッセージが各行に表示されます。from/to 電話番号の組み合わせの最後のメッセージが何であったかを調べる必要があります。

以下のような表を作成しました。(例は TSQL - SQL Server にあります)。

Create Table SmsLog 
(
    messageId int identity (1,1) primary key,
    messageDate datetime,
    fromPhoneNumber varchar(50),
    toPhoneNumber varchar(50),
    textMessage varchar(50)
)

GO

次に、次のように一連の行を挿入しました。

Insert into SmsLog(MessageDate, FromPhoneNumber, ToPhoneNumber, TextMessage) Values (GetDate(), '+19175380077', '+14255587777', 'Blah 1');
Insert into SmsLog(MessageDate, FromPhoneNumber, ToPhoneNumber, TextMessage) Values (GetDate(), '+19175380077', '+14255587777', 'Blah 2');
Insert into SmsLog(MessageDate, FromPhoneNumber, ToPhoneNumber, TextMessage) Values (GetDate(), '+19175380077', '+14255587777', 'Blah 3');
Insert into SmsLog(MessageDate, FromPhoneNumber, ToPhoneNumber, TextMessage) Values (GetDate(), '+19175380077', '+12149653333', 'Blah 4');
Insert into SmsLog(MessageDate, FromPhoneNumber, ToPhoneNumber, TextMessage) Values (GetDate(), '+19175380077', '+12149653333', 'Blah 11');
Insert into SmsLog(MessageDate, FromPhoneNumber, ToPhoneNumber, TextMessage) Values (GetDate(), '+19175380077', '+14255587777', 'Blah 12');
Insert into SmsLog(MessageDate, FromPhoneNumber, ToPhoneNumber, TextMessage) Values (GetDate(), '+19175380077', '+14254490006', 'Blah 13');
Insert into SmsLog(MessageDate, FromPhoneNumber, ToPhoneNumber, TextMessage) Values (GetDate(), '+19175380077', '+14254490006', 'Blah 21');
Insert into SmsLog(MessageDate, FromPhoneNumber, ToPhoneNumber, TextMessage) Values (GetDate(), '+19175380077', '+14254490087', 'Blah 22');
Insert into SmsLog(MessageDate, FromPhoneNumber, ToPhoneNumber, TextMessage) Values (GetDate(), '+19175380077', '+14254490087', 'Blah 23');
GO

次のクエリは、ジョブを完了する必要があります (これは MSSQL で完全に機能します)。

/* Retrieve the last message per from/to from the table*/
SELECT  * 
FROM    SmsLog
WHERE   MessageId IN
    (
        SELECT  MAX(MessageId) as MessageId
        FROM    SmsLog
        GROUP
        BY      FromPhoneNumber, ToPhoneNumber
    )
GO

MSSQL の結果は次のとおりです (これはまさに、データ ストレージとして SQLite を使用するアプリから必要なものです)。

5   2012-10-28 23:32:23.257 +19175380077    +12149653333    Blah 11
6   2012-10-28 23:32:23.257 +19175380077    +14255587777    Blah 12
8   2012-10-28 23:32:23.257 +19175380077    +14254490006    Blah 21
10  2012-10-28 23:32:23.257 +19175380077    +14254490087    Blah 23

しかし、PhoneGap アプリケーション (iOS) の SQLite で同じクエリを使用することはできません。JavaScript コードは次のとおりです。

  db.transaction(function(tx)
            {
                var sqlString = "SELECT * FROM smsLog WHERE messageId IN (SELECT    MAX(messageId) AS messageId FROM smsLog GROUP BY fromPhoneNumber, toPhoneNumber";

                tx.executeSql (sqlString, [],
                function(tx, result)
                {
                    if (console)
                    {
                        console.log("in retrive success");

                    }

                    var liblock = "";
                    $.each(result.rows,function(index)
                    {
                        var row = result.rows.item(index);

                        liblock +=
                        ('<li><a href="#"><h3>'+row['toPhoneNumber'] + '</h3><p>' +row['textMessage']+'</p><p class="ui-li-aside"><strong>'+ formatDate(new Date(row['messageDate'])) + '</strong></p></a></li>');

                    });

                    $("#topicList").html(liblock);
                    $("#topicList").listview("refresh");
                },
                function(err)
                {
                    if (console)
                    {
                        console.log(err);
                    }
                });
            },
            function (dbError)
            {
                if (console)
                {
                    console.log("ERROR Performing database operation");
                    console.log(dbError);
                }
            },
            function (dbSuccess)
            {
                if (console)
                {
                    console.log("Record retreived");
                }
            });
        }
4

0 に答える 0