2012-01-09 18 views
0

私は複数テーブルのSQLクエリを持っています。IDごとに1行を取得するためにSQLクエリを簡略化

私の必要性は:クエリは、私は 'etablissement_id'と同じクエリに戻ってくるすべての情報によって1行を生成する必要があります。

問題は、このクエリは「成立」は「複数の写真を」持っていると、突然あり、私のクエリは、私は現在、同じIDの複数の行を生成し、テーブルの上に現在あるということです...

私は次のことをしたいですステートメント - LEFT JOIN etablissementContenuMultimedia ON etablissement.etablissement_id = etablissementContenuMultimedia.etablissementContenuMultimedia_etablissementId - マルチメディアコンテンツは1つだけ表示されます。以下のクエリでこれを行うことは可能ですか?

ここに生成されたクエリがあります。ここで

SELECT DISTINCT `etablissement`. * , `etablissementContenuMultimedia`. * , `misEnAvant`. * , `quartier`. * 
FROM `etablissement` 
LEFT JOIN `etablissementContenuMultimedia` ON etablissement.etablissement_id = etablissementContenuMultimedia.etablissementContenuMultimedia_etablissementId 
LEFT JOIN `misEnAvant` ON misEnAvant.misEnAvant_etablissementId = etablissement.etablissement_id 
LEFT JOIN `quartier` ON quartier_id = etablissement_quartierId 
WHERE (
    misEnAvant_typeMisEnAvantId =1 
    AND (
     misEnAvant_dateDebut <= CURRENT_DATE 
     AND CURRENT_DATE <= misEnAvant_dateFin 
    ) 
) 
AND (
    etablissement_isActive =1 
) 
ORDER BY `etablissement`.`etablissement_id` ASC 
LIMIT 0 , 30 

コードは、ZF

public function find(){ 
    $db = Zend_Db_Table::getDefaultAdapter(); 
    $oSelect = $db->select(); 
    $oSelect->distinct() 
      ->from('etablissement') 
      ->joinLeft('etablissementContenuMultimedia', 'etablissement.etablissement_id = etablissementContenuMultimedia.etablissementContenuMultimedia_etablissementId') 
      ->joinLeft('misEnAvant', 'misEnAvant.misEnAvant_etablissementId = etablissement.etablissement_id') 
      ->joinLeft('quartier', 'quartier_id = etablissement_quartierId ') 
      ->where ('misEnAvant_typeMisEnAvantId = 1 AND (misEnAvant_dateDebut <= CURRENT_DATE AND CURRENT_DATE <= misEnAvant_dateFin) ') 
      ->where ('etablissement_isActive = 1') 
      ->order(new Zend_Db_Expr('RAND()')); 


    $zSql = $oSelect->__toString(); 

    if(isset($_GET['debug']) AND $_GET['debug'] == 1) 
     echo $zSql ; 
    //die(); 

    $oResultEtablissement = $db->fetchAll($oSelect); 

    return $oResultEtablissement ; 
} 

は、あなたが私を助けることができる使用されていますか?敬具

答えて

0

データベースのモデル全体をやり直す時間がかかりました。今は動作します。システムに欠陥があるとの解決策はありませんでした

0

あなたが探している場合は、持っているだけで、メディアの一つは関係なく、あなただけのクエリに制限を加えることができ、それは、その後でよいの多くの外に表示されましたか?その後、ASCendingやDESCendingのクエリを微調整できますか?

このクエリーには、ある施設のイメージ(またはイメージをそのまま)、または各アクティブな施設ごとに1つのイメージがあるはずですか?私はあなたがページングする可能性があることを意味する0,30の制限を参照してください....

あなたが望む結果が1つだけの施設の検索であり、それが来る最初の画像はうまくいくでしょう。 "limit 1"を使うと、結果が1つしか得られません。

+0

私は60の施設を持っていれば60行が必要です。現在、私は限界のブレークの問題を置いています。実際、私はたまに1つの機関で7〜8行を使いますが、「ランド」を使用すると、最初の5つの結果で同じ施設を3回持つ可能性があります。 このリクエストは、私のホームページの5つの機関でランダムに作成されます。そして、私は、PHPの重複排除ではなく、良いアプリケーションを作る方法を見つけるだろう。 –

関連する問題