1

私は html5/jqm/phonegap アプリケーションに取り組んでいます。クライアント側のデータベース テーブルからレコードのリストを選択しています。日付でグループ化して並べ替えたいのですが、テーブルに存在する日付は次のような JS 日付オブジェクトです。

Mon Nov 19 2012 16:20:55 GMT+0000 (GMT)

グループ化し、数字の日 (この例では 18,19,20) で並べ替えたいと思います。したがって、次の詳細:

Sun Nov 18 2012 16:20:55 GMT+0000 (GMT)
Mon Nov 19 2012 16:20:55 GMT+0000 (GMT)
Sun Nov 18 2012 16:20:55 GMT+0000 (GMT)
Tue Nov 12 2012 16:20:55 GMT+0000 (GMT)

次の順序で返されます。

Tue Nov 20 2012 16:20:55 GMT+0000 (GMT)
Mon Nov 19 2012 16:20:55 GMT+0000 (GMT)
Sun Nov 18 2012 16:20:55 GMT+0000 (GMT)
Sun Nov 18 2012 16:20:55 GMT+0000 (GMT)

選択の一部としてSQLでこれを行うことは可能ですか? または、Js/jQuery内でこれを行う方法について、誰かが私を正しい方向に導くことができない場合は?

前もって感謝します

** ピートからの質問に応じて編集 **

私は Jaascript/html5 クライアント側バージョンの SQL を使用していますが、これは SQLite に基づいていると思います。DB を作成するには、次の js を呼び出すだけです -

var db = openDatabase(shortName, version, displayName, maxSize);

私のDbスキーマは次のとおりです。

transaction.executeSql('CREATE TABLE RECORDINGS (id INTEGER PRIMARY KEY AUTOINCREMENT, caseRef, startDate, endDate, caseTypeId, actionTypeId, notes, userId, syncStatus);');
transaction.executeSql('INSERT INTO RECORDINGS (caseRef, startDate, endDate, caseTypeId, actionTypeId, notes, userId, syncStatus) VALUES ("CR1234", "'+startDate+'", "'+endDate+'", 1, 2, "Meeting about something", 1, 0);');

私の選択は現在次のようになっています:

function getRecordingsQuery(transaction) {
        transaction.executeSql('SELECT RECORDINGS.id, RECORDINGS.caseRef, RECORDINGS.startDate, RECORDINGS.endDate, RECORDINGS.notes, RECORDINGS.syncStatus, CASETYPES.description FROM RECORDINGS, CASETYPES WHERE RECORDINGS.caseTypeId = CASETYPES.id AND RECORDINGS.userId =? ORDER BY startDate DESC', [window.currentSignedInUserId], getRecordingsDataHandler, errorHandler);
    }

それは役に立ちますか?

4

1 に答える 1

0

アップデート

SQLLiteはをサポートしていませんが、をサポートDATEPARTしていstrftimeます。以下をあなたのORDER BY:として追加してみてください

ORDER BY CAST(strftime("%d", date) AS INTEGER) DESC

代わりに、JavaScriptで並べ替えを処理することもできます。これを行うには、より良い、またはより効率的な方法があると確信していますが、次のような配列に組み込みの並べ替えを使用することもできます。

var getRecordingsDataHandler = function getRecordingsDataHandler(tx, results) {
    var rows = [],
        row = null,
        i = 0;
      if (results.rows && results.rows.length) {
        for (i = 0; i < results.rows.length; i += 1) {
            rows.push({
                "startDate": new Date(results.rows.item(i).startDate),
                "data": results.rows.item(i)
            });
        }
        rows.sort(function (a, b) {
            var ascending = a.startDate.getDate() - b.startDate.getDate(),
                descending = b.startDate.getDate() - a.startDate.getDate();
            return descending;
        });
        for (i = 0; i < rows.length; i += 1) {
            row = rows[i].data;
            //process the rest
            //since row === results.rows.item(i), reference from row
        }
    }
};

オリジナル:

使用しているSQLバージョンがわからないと、質問のその部分に答えるのは困難です。それらのほとんどは関数をサポートしていると思うDATEPARTので、次のことを試すことができます。

ORDER BY DATEPART(dd, YourDateField) DESC

JavaScript / jQueryに関する限り:

var d = new Date('Tue Nov 20 2012 16:20:55 GMT+0000 (GMT)');

JavaScriptで日付オブジェクトを返します。これを並べ替えることができます。日付だけ:

d.getDate(); //returns day of month

質問(使用しているSQLのエンジン/バージョン、またはクライアント側のテーブルの構造とソートに使用している関数)についてもう少し具体的に説明できる場合は、サポートできる可能性があります。少し良く。

于 2012-11-18T17:00:12.340 に答える