タイトルは次のように書き換えられます: Sequelize を使用して関連テーブルの行数をカウントする
P粉792026467
P粉792026467 2023-08-27 22:35:45
0
1
405
<p>Sequelize と mySQL を使用して、<code>User</code> と <code>Post</code> という 2 つのテーブルがあります。 </p> <p>2 つのテーブル間の関係は <code>M:N</code></p> です。 <pre class="brush:php;toolbar:false;">db.User.belongsToMany(db.Post, { through: "いいね", as: "いいね" }); db.Post.belongsToMany(db.User, { through: 「いいね!」、as: 「いいね!」 });</pre> <p>私が望むのは、投稿のすべての「いいね!」の ID と「いいね!」の数を取得することです。 </p> <p>このようにして <code>すべてのいいね者</code> を取得できることはわかっています。 </p> <pre class="brush:php;toolbar:false;">const post = await Post.findOne({ ここで: { id: postId }、 属性: ["id"、"title"、"imageUrl"]、 含む: [{ モデル: ユーザー、 として: 「いいね!」、 属性: ["id"]、 経由: { 属性: [] }、 }] }) // 結果 { 「id」: 36、 "タイトル": "テスト", "imageUrl": "하늘이_1644886996449.jpg", 「いいね!」: [ { 「ID」: 13 }、 { 「ID」: 16 } ] }</pre> <p>また、この方法で <code>いいね数</code> を取得できることもわかりました。 </p> <pre class="brush:php;toolbar:false;">const post = await Post.findOne({ ここで: { id: postId }、 属性: ["id"、"title"、"imageUrl"]、 含む: [{ モデル: ユーザー、 として: 「いいね!」、 属性: [[sequelize.fn("COUNT", "id"), "likersCount"]], }] }) // 結果 { 「id」: 36、 "タイトル": "テスト", "imageUrl": "하늘이_1644886996449.jpg", 「いいね!」: [ { 「いいね数」: 2 } ] }</pre> <p>しかし、両方を同時に取得する方法がわかりません。 両方を使用したときの結果を確認してください。 </p> <pre class="brush:php;toolbar:false;">{ モデル: ユーザー、 として: 「いいね!」、 属性: ["id", [sequelize.fn("COUNT", "id"), "likersCount"]], 経由: { 属性: [] }、 } // 結果 「いいね!」: [ { 「id」: 13、 「いいね数」: 2 } ]</pre> <p>いいね!をした人は 1 人だけ表示されます (id: 13) 別のいいね! (id: 16) が表示されるはずです。 </p> <p>何が問題ですか? </p>
P粉792026467
P粉792026467

全員に返信(1)
P粉193307465

COUNT はカウントするためにレコードをグループ化する集計関数であるため、1 つだけが表示されます。したがって、両方を取得する唯一の方法は、サブクエリを使用し、結合テーブル内のレコード数を数え、同時に M:N 関係の反対側にあるレコードを取得することです。

リーリー
いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート