2014-09-23 75 views
1

我有一个查询从5个表中检索信息。它们之间的关系显示在附图中。我已经创建了一个查询来做到这一点,迄今为止这么好。问题是每个用户在“PROFISSIONAL_PORCENTAGEM”表中可以有一个或多个条目。我的查询是检索所有他们。我想要基于日期字段“PROFISSIONAL_PORCENTAGEM_DATA”的最后一个字段。我对这个问题进行了研究,当我们仅使用一个表时,“检索每个ID的最近值”的解决方案是相同的,请参阅MySQL - Selecting the most recent post by each of the 10 most recent authors这里的示例。但在这种情况下,我有5张桌子。我不知道该怎么做。任何想法将不胜感激。Mysql - 最近为每个ID输入

SELECT 
    PP.PROFISSIONAL_PORCENTAGEM_Pk, 
    UST.USER_NAME, 
    ADDR.ADDRESS_NOME, 
    ADDR.ADDRESS_ATIVO, 
    PA.PROFESSIONAL_ADDRSS_PK, 
    PP.PROFISSIONAL_PORCENTAGEM_PORCENT, 
    PP.PROFISSIONAL_PORCENTAGEM_FK_CLINICA, 
    PP.PROFISSIONAL_PORCENTAGEM_DATA 

FROM 
    profissional_porcentagem AS PP 
    RIGHT JOIN professional_addrss AS PA 
    ON(PP.PROFISSIONAL_PORCENTAGEM_FK_CLINICA=PA.PROFESSIONAL_ADDRSS_PK) 

    INNER JOIN address ADDR 
    ON(PA.PROFESSIONAL_ADDRSS_FKADDRSS=ADDR.ADDRESS_Pk) 

    INNER JOIN professional PF 
    ON(PA.PROFESSIONAL_ADDRSS_FKPROFESSIONAL=PF.PROFESSIONAL_Pk) 

    INNER JOIN usert AS UST 
    ON(PF.PROFESSIONAL_FKUSER=UST.USER_Pk) 

WHERE UST.USER_Pk=3 
AND ADDR.ADDRESS_ATIVO=1; 

对不起,我需要10个声望来附加图像! 这是图像链接http://imgur.com/ZP3OdeX

+0

你启发应该可以将图像上传到[imgur](http://www.imgur.com)并提供链接。 – Kermit 2014-09-23 14:56:08

+0

你可以尝试添加用户有最大(PROFISSIONAL_PORCENTAGEM_DATA),不知道,只是快速回答 – gorgi93 2014-09-23 15:03:10

+1

谢谢克米特。我确实知道这种可能性。现在你可以看到数据库图像。 – zwitterion 2014-09-23 15:03:32

回答

1

那么,最后我找到了解决方案。 只需将此代码添加到SQL查询的末尾:

AND PP.PROFISSIONAL_PORCENTAGEM_Pk = (
SELECT t2.PROFISSIONAL_PORCENTAGEM_Pk FROM profissional_porcentagem as t2 
    where t2.PROFISSIONAL_PORCENTAGEM_FK_CLINICA = PP.PROFISSIONAL_PORCENTAGEM_FK_CLINICA 
    order by t2.PROFISSIONAL_PORCENTAGEM_Pk desc limit 1 
) 

然后我们要去有这样整个查询:

SELECT 
PP.PROFISSIONAL_PORCENTAGEM_Pk, 
UST.USER_NAME, 
ADDR.ADDRESS_NOME, 
ADDR.ADDRESS_ATIVO, 
PA.PROFESSIONAL_ADDRSS_PK, 
PP.PROFISSIONAL_PORCENTAGEM_PORCENT, 
PP.PROFISSIONAL_PORCENTAGEM_FK_CLINICA, 
PP.PROFISSIONAL_PORCENTAGEM_DATA 

FROM 
profissional_porcentagem AS PP 
RIGHT JOIN professional_addrss AS PA 
    ON(PP.PROFISSIONAL_PORCENTAGEM_FK_CLINICA=PA.PROFESSIONAL_ADDRSS_PK) 

INNER JOIN address ADDR 
    ON(PA.PROFESSIONAL_ADDRSS_FKADDRSS=ADDR.ADDRESS_Pk) 

INNER JOIN professional PF 
    ON(PA.PROFESSIONAL_ADDRSS_FKPROFESSIONAL=PF.PROFESSIONAL_Pk) 

INNER JOIN usert AS UST 
    ON(PF.PROFESSIONAL_FKUSER=UST.USER_Pk) 

WHERE UST.USER_Pk=3 
AND ADDR.ADDRESS_ATIVO=1 

AND PP.PROFISSIONAL_PORCENTAGEM_Pk = (
SELECT t2.PROFISSIONAL_PORCENTAGEM_Pk FROM profissional_porcentagem as t2 
    where t2.PROFISSIONAL_PORCENTAGEM_FK_CLINICA = PP.PROFISSIONAL_PORCENTAGEM_FK_CLINICA 
    order by t2.PROFISSIONAL_PORCENTAGEM_Pk desc limit 1 
); 

注:我被这个帖子Select row with most recent date per user