実際、私は SQL の仕組みに少し慣れていません。常に ORM にすべてを任せていました。しかし、この場合、Persistent はこの種の機能を公開していないため、何をすべきか途方に暮れています。
私は多対多の関係を持っています:
+------------+
| Entries |
+----+-------+
| id | date |
+----+-------+
| 1 | Jan 1 |
+----+-------+
| 2 | Jan 2 |
+----+-------+
| 3 | Jan 3 |
+----+-------+
+------------+
| Tags |
+------------+
| id | label |
+----+-------+
| 1 | Apple |
+----+-------+
| 2 | Boat |
+----+-------+
| 3 | Car |
+----+-------+
+-------------------+
| EntryTags |
+----------+--------+
| entry_id | tag_id |
+----------+--------+
| 1 | 1 |
+----------+--------+
| 1 | 2 |
+----------+--------+
| 2 | 2 |
+----------+--------+
| 3 | 3 |
+----------+--------+
そして、タグを主に最新のエントリの日付 (降順) で並べ替え、次にラベル (昇順) で並べ替えたいと考えています。
TagCar
の最新のエントリは 1 月 3 日なので、最初に表示されます。tagApple
の最新のエントリは 1 月 2 日ですが、 tag もそうですBoat
。ただし、ラベルはアルファベット順でApple
ラベルの前に来るため、2 番目と3 番目になります。Boat
Apple
Boat
returns:
1. Tag w/ id 3
2. Tag w/ id 1
3. Tag w/ id 2
私の調査を通じて、これを行うには何らかの結合の組み合わせが必要であることがわかりました。ただし、これまでのところ、1 対多の関係 (スレッド内のトピックを最新の投稿で並べ替える) の解決策しか見つかりませんでした。それらを理解していると思いますが、多対多のこれらの 3 方向結合を含むものはありません。関係。
可能な答えとして生のSQLを含めています.SQLの方法を本当に求めているだけだと思います.SQLバインディングにEsqueletoを使用していますが、SQLを理解したら、 Esqueleto への変換は簡単です。バックエンドとして postgresql を使用していますが、私のバインディングは一般的なバックエンド用であるため、postgres 固有のものは使用したくありません。
どこから始めればよいか誰にも分かりますか?どの種類の結合を確認する必要がありますか?また、最新のエントリをどのように並べ替えるのですか?