2017-03-26 20 views
1

私は2つの異なるテーブルの情報を結合する必要があり、ロジックに問題があります。ここでデータベースからのトレンド投稿を取得する - symfony query builder - MySQL

は私のテーブルです、私は私がどの記事を取得しようとしている無関係な情報

ポスト(groupIdを、dateCreated)

postbump(userIdを、postId)

の一部を除外しています「トレンド」です。言い換えれば、私は与えられたグループで

  1. をしている投稿を取得する必要があり、

  2. ($日付によって提供される)、指定した日付の後

  3. ($グループアレイによって提供)彼らは

これは私が唯一の新しいポストを得るが、それは何の理解を提供するのに役立つ可能性があるのオフに構築しています私の機能であるを持っているバンプの量によって順序

  • 私は後です。私が持っているコードの現在のリポジトリはpostリポジトリです(symfonyクエリービルダーに精通していない人にとっては、基本的に自動的にpostテーブルから選択することを意味します)。これは私がこれまで持っているものである

    public function getNewHomeFeedPosts($groups){ 
        $qb = $this->repository->createQueryBuilder('x'); 
        $qb->select('x'); 
        $qb->where('x.groupId IN (:groups)'); 
        $qb->setParameter('groups',$groups); 
        $qb->orderBy('x.dateCreated','DESC'); 
        return $qb->getQuery()->getResult(); 
    
    } 
    

    、私の本当の問題は、各ポストがあり、バンプの量によって順序です。私はある時点で結合を利用しなければならないと考えています。

    public function getTrendingHomeFeedPosts($groups, $date){ 
        $qb= $this->repository->createQueryBuilder('x'); 
        $qb->select('x'); 
        $qb->where('x.groupId IN (:groups) AND x.dateCreated < :dateCreated'); 
        $qb->setParameter('groups',$groups); 
        $qb->setParameter('dateCreated', $date); 
        //todo 
        return $qb->getQuery()->getResult(); 
    } 
    

    querybuilderの構文に精通していない場合は、SQLでの回答が問題ありません。

  • +0

    'in'演算子のバインディングは正しくないようです。 – Shadow

    +0

    綴りはどういう意味ですか?最初のコードは説明どおりに動作するので、私はあなたが何の問題に言及しているのか分かりません。 –

    答えて

    1

    私はsymfonyを知らないので、私の答えはsqlです。あなたはpostidによってpostpostbumpテーブル、グループに参加し、グループや日付のバンプとフィルタの数をカウントする必要があります。

    select p.postid, p.groupid, p.datecreated, count(*) as postbumps 
    from post p 
    left join postbump pb on p.postid=pb.postid 
    where p.groupid in (...) and p.datecreated<... 
    group by p.postid, p.groupid, p.datecreated 
    order by count(*) desc 
    

    plsはまた、あなたは、単にinオペレータ内のパラメータの配列をバインドすることはできませんのでご注意しますsymfonyのクエリービルダーがパラメータ設定に文字列操作を使用し、プリペアドステートメントを使用しない限り、単一の値として扱います。

    +0

    自分のロジックを自分のquerybuilderに実装できるかどうかを確認します。 as演算子までは、クエリビルダが配列を適切に処理することはかなり確信しています。私はあなたにその問題があるかどうかを知らせます。 –

    +0

    私は試みに失敗しました。私はあなたのロジックを理解していますが、問題は私が同じpost_idを持ついくつかの行に終わるだろう、そしてそれらの間で異なる唯一の事はポストバンプでしょう。私はpost_ids(繰り返しはありません)がどれくらいの数のバンプでソートされているかが必要です。私の次の考えは、質問を2つのビットに分割して、それぞれの投稿が持つバンプの量を最初に数えてから、結合してソートすることです。 –

    +1

    groupidとdatecreatedはpostテーブルのフィールドであり、group byはグループを作成するため、私のクエリはpostidごとに1つのレコードを返します。だから、私はあなたのコメントを本当に理解していない。 – Shadow

    関連する問題