0

starts_at何かが始まった瞬間のタイムスタンプを保持するフィールドがあります。seconds_longまた、イベントが続く秒数を表す別のフィールドがあります。

未完了のイベントをすべて選択する必要がありますが、フィールドstarts_atseconds_longフィールドを合計する方法が見つかりません。Doctrineが魔法をかけることを期待して、私は最初にそれらを合計しようとしましたが、うまくいきませんでした:

addWhere("c.starts_at + c.seconds_long > ?", date('Y-m-d H:i:s', time()));

残念ながら、それは機能しません。次に、starts_atフィールドをUNIX秒に変換しようとしましたが、sqliteとMySQLで機能するSQL関数が見つかりませんでした。

これを行う方法はありますか?どのように?

4

3 に答える 3

1

これを行うにはおそらくもっと簡単な方法がありますが、フィールドを「starts_at」と「ends_at」(両方ともタイムスタンプ)として設定するのはどうでしょうか。

次に、starts_at - end_at > ? という減算で差を得ることができます。

于 2010-03-02T18:26:31.353 に答える
0

SQLiteとMySQLの両方で動作するクエリを作成することは不可能だと思います。ORMは多くのものをデータベースに依存させないようにすることができますが、タスクをSQLiteとMySQLの両方に変換する方法はありません。

最初にすべきことは、タスクの概念を単純化することです。PHPで何かを実行して、実行している方法でクエリを作成する必要がないようにします。またはデータベース構造を変更します。

于 2010-03-15T11:02:21.227 に答える
0

これはうまくいくはずですが、私はそれをテストしませんでした。

Doctrine Record クラスで

function findFinishedOccurances()
{
    $this->getTable()-
         ->createQuery()
         ->select("c.*, DATE_ADD(c.starts_at, INTERVAL c.seconds_long SECOND) AS c.finished_at")
         ->where("c.finished_at >= ?", date('Y-m-d H:i:s', time()))
         ->execute(); 
}
于 2010-03-04T07:28:02.473 に答える