1
私は次のように2つのテーブルを持っています:Laravel Mysqlクエリ条件で選択
1)。 URLの
id domain created_at
------------------------------------------------
1 google.com 2016-11-30 00:00:00
2 test.com 2016-11-29 00:00:00
3 example.com 2016-11-26 00:00:00
など。 2)。リンク
id urls_id end_date created_at status
---------------------------------------------------------------------------
1 2 2016-11-30 00:00:00 2016-11-30 00:00:00 Approved
2 2 2016-12-01 00:00:00 2016-11-30 00:00:00 Approved
3 2 NULL 2016-11-30 00:00:00 Approved
4 2 2017-01-01 00:00:00 2016-12-01 00:00:00 Approved
5 2 2016-01-01 00:00:00 2016-12-01 00:00:00 Pending
6 3 2016-11-24 00:00:00 2016-12-01 00:00:00 Pending
7 3 2016-01-01 00:00:00 2016-12-01 00:00:00 Approved
8 3 NUll 2016-12-02 00:00:00 Pending
9 3 2016-01-08 00:00:00 2016-12-01 00:00:00 Approved
10 3 NUll 2016-12-02 00:00:00 Pending
私は、これらの条件に戻すためにMYSQLクエリを記述したいと思います:これらの条件を以下のドメインあたり 1行:
1). end_date NOT NULL AND
2). end_date > Carbon::now() (I am using carbon) not expired AND
3). status is "Approved" AND
4). return latest end_date closer to present or now.
例えば、それが見えるとありますので、すべての "urls_id" = 2を選択し、すべてのステータスを承認とし、end_dateがNULLでなく期限切れではないことを探しますが、1つのNullがあるので返さないで、 "urls_id" = 3に移動し、有効期限が切れていて、NULLがないか期限切れになっていないので、遅いここ
番目のEND_DATE
は出力id domain end_date_max
------------------------------
9 example.com 2016-01-08 00:00:00
で、我々は1つのSQLクエリでこれを行うことができますか?あなたはこのような生のクエリせずにこれを行うことができますので、Laravelにあるいは単なる生のクエリ
おかげ
これはtest.comを返しています。私はexample.comを返そうとしています。これは条件を満たしている最初のものをすべてチェックしていますので、戻り値test.comはid = 1です。私は最初にすべてのステータスを取得する必要があります= "承認"少なくとも1つがend_date NULLまたはend_date期限が切れていないかどうかを確認しないでくださいそのドメイン全体を得る、あなたは私のポイントを参照してください – user3150060
他のヘルプ? – user3150060
この場合、テーブルを元に戻すようにしてください。ただし、MySQLに関する知識がなければ、複雑なクエリを実行する前に書籍を読むべきでしょう。 MySQLコード内のテーブルの例を逆転: "SELECT t2.id、t2.domain、t1.end_date FR1リンクt1 LEFT JOIN url t2 on t2.id = t1.urls_id WHERE t1.end_date IS NOT NULLおよびt1.end_date> "YOUR_CARBON_DATE_HERE"およびt1.status = '承認済み' GROUP BY t1.end_date ORDER BY t1.end_date DESC "。 –