简化sql查询以获得每个id一行

时间:2012-01-09 14:48:31

标签: mysql zend-framework

我有一个多表SQL查询。

我的需求是:查询应该通过'etablissement_id'生成一行...以及我希望在同一查询中返回的所有信息。

问题是这个查询目前在一个表上,“建立”可能有“多张照片”,突然,我的查询我目前为同一个id生成几行......

我想要以下声明 - LEFT JOIN etablissementContenuMultimedia ON etablissement.etablissement_id = etablissementContenuMultimedia.etablissementContenuMultimedia_etablissementId - 只显示一个多媒体内容。是否可以在下面的查询中执行此操作?

以下是生成的查询。

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 ;
}

你能帮助我吗?

此致

2 个答案:

答案 0 :(得分:0)

如果您希望只显示其中一个媒体,无论它是多少,那么您只需添加查询限制即可?之后你可以调整ASCending或DESCending的查询吗?

这个查询是否应该为一个企业提供图像(或图像),或者每个活动企业都有一个图像?我看到你有一个限制0,30,这意味着你可能会分页....

如果您想要的结果是只搜索一个机构,并且它所来的第一个图像可以正常工作..只需使用“限制1”,您将只获得一个结果。

答案 1 :(得分:0)

我花时间重做数据库的整个模型......现在它可以工作了。系统没有解决方案,因为有缺陷的