2011-05-26 3 views
0

Bref, j'essaie de connaître l'heure de la dernière mise à jour de mon site. Le contenu principal de mon site est stocké dans quatre tableaux. Chacune de ces tables possède un champ updated_at.Nested Nested? Aide sur les requêtes MySQL

Je suis en mesure de les combiner dans une requête imbriquée:

SELECT (
    SELECT updated_at FROM proposition ORDER BY updated_at DESC LIMIT 1 
) as latest_proposition, 
(
    SELECT updated_at FROM product ORDER BY updated_at DESC LIMIT 1 
) as latest_product, 
(
    SELECT updated_at FROM review ORDER BY updated_at DESC LIMIT 1 
) as latest_review, 
(
    SELECT updated_at FROM segment ORDER BY updated_at DESC LIMIT 1 
) as latest_segment 

..which me donne quelque chose comme ..


-------------------+-------------------+-------------------+------------------- 
latest_proposition |latest_product  |latest_review  |latest_segment  
-------------------+-------------------+-------------------+------------------- 
2011-05-25 14:45:30|2011-05-25 14:37:28|2011-05-12 09:20:19|2011-05-12 09:20:19 
-------------------+-------------------+-------------------+------------------- 
1 row in set (0.00 sec) 

Ma question est - Comment puis-je obtenir maintenant la dernière de ces champs? Pour obtenir l'heure globale "mise à jour du site".

Merci d'avance!

+1

Je pense que vous êtes après une union. – Andrew

Répondre

4
select 
    max(updated_at) as updated_at 
from 
(
    SELECT max(updated_at) as updated_at FROM proposition 
    UNION 
    SELECT max(updated_at) FROM product 
    UNION 
    SELECT max(updated_at) FROM review 
    UNION 
    SELECT max(updated_at) FROM segment 
) x 
+0

@GolexTrol, utilisez un 'UNION ALL' sinon MySQL (essayera d'éliminer) les lignes en double qui ralentiront la requête. – Johan

+0

Oui, c'est vrai. À travers cela, essayer d'éliminer les doublons sur un total de 4 ne sera pas un succès. En outre, moins de lignes, accélérera la récupération du maximum dans la requête principale. (tous théoriquement en traitant seulement 4 lignes). Mais un bon point en effet. UNION ALL est généralement meilleur et guère pire que UNION. – GolezTrol

0
SELECT updated_at 
from 
(
    SELECT updated_at FROM proposition ORDER BY updated_at DESC LIMIT 1 
      union all 
    SELECT updated_at FROM product ORDER BY updated_at DESC LIMIT 1 
      union all 
    SELECT updated_at FROM review ORDER BY updated_at DESC LIMIT 1 
      union all 
    SELECT updated_at FROM segment ORDER BY updated_at DESC LIMIT 1 
) x 
order by updated_at limit 1 
0
SELECT MAX(updated_at) 
FROM (SELECT MAX(updated_at) FROM proposition UNION ALL 
    SELECT MAX(updated_at) FROM product UNION ALL 
    SELECT MAX(updated_at) FROM review UNION ALL 
    SELECT MAX(updated_at) FROM segment) x 
+0

Vous devez indiquer le champ dans la sous-sélection. Comme je l'ai fait; *) – GolezTrol