1

Doctrine 1.2 を使用してリレーショナル除算を実行しようとすると、以下のクエリで見つかった DISTINCT のように見えるものに対して「重複したエイリアス」エラーが表示されます。

SELECT 
    Data.ID  
FROM 
    Data 
INNER JOIN 
    TaggedData ON (Data.id = TaggedData.data_id) 
INNER JOIN 
    Tag ON (Tag.id = TaggedData.tag_id) 
WHERE 
    Tag.id IN ('1' , '2') 
HAVING COUNT(DISTINCT tag.iD)=2

クエリからDISTINCTを削除すると、クエリは実行されますが、必要なものが得られません。Doctrine でこの問題を解決する適切な方法はありますか?

特定のコード:

    $query = $this->createQuery("p")
        ->select("p.*")
        ->innerJoin("p.Data s")
        ->innerJoin("s.Tags c")
    ;
    $query
        ->andWhereIn("c.id", $tags)
        ->addHaving("COUNT(DISTINCT c.id) = ?", count($tags))
    ;
4

2 に答える 2

1

単一の値のみを返すため、生の SQL を実行するだけです。

    $sql = <<<SQL

SELECT 
    Data.ID  
FROM 
    Data 
INNER JOIN 
    TaggedData ON (Data.id = TaggedData.data_id) 
INNER JOIN 
    Tag ON (Tag.id = TaggedData.tag_id) 
WHERE 
    Tag.id IN ('1' , '2') 
HAVING COUNT(DISTINCT tag.iD)=2

SQL;

    $conn = Doctrine_Manager::getInstance()->getConnection('connection_name');
    $id = $conn->fetchOne($sql);
于 2012-10-03T16:29:53.603 に答える
1

GROUP BY区別せずに持つ句を使用する必要があります。GROUP BY Data.IDしたがって、直前に追加すればHAVINGすべて問題ないと思います。

于 2012-10-03T18:16:43.550 に答える