2011-01-20 5 views
1

Je fusionne deux tables, chacune avec des données d'événements différentes. Chaque table a une date pour les événements.Requête mySQL - tri par date

Comment combiner ces événements pour les trier de façon transparente par date?

SELECT 
    t1.eventName, 
    t1.eventTime, 
    t2.evntName, 
    t2.evntTime 
FROM t1 
LEFT JOIN t2 ON (t1.eventID = t2.eventID) 
ORDER BY ??? DESC 
LIMIT 10 

Répondre

2

@Gonzalo est proche, mais pas tout à fait là. Vous devez placer chaque table dans des sous-requêtes et alias chaque colonne que vous voulez dans le résultat final. Si une table n'a pas de colonne dont vous avez besoin d'une autre, utilisez un littéral et aliasz-le.

(SELECT eventName, eventTime, foo FROM t1) 
UNION ALL 
(SELECT evntName AS eventName, evntTime AS eventTime, NULL AS foo FROM t2) 
ORDER BY eventTime DESC 

Mettez toutes les clauses WHEREà l'intérieur les sous-requêtes.

1

pas à 100% sûr de ce que vous essayez de faire ici, mais peut-être ceci:

ORDER BY GREATEST(t1.eventTime, t2.eventTime) DESC 

ETA:

On dirait que vous ne pouvez pas comparer les dates directement avec GREATEST, vous pourrait avoir besoin de faire cela:

ORDER BY GREATEST(UNIX_TIMESTAMP(t1.eventTime), UNIX_TIMESTAMP(t2.eventTime)) DESC 
+0

Cela semble intéressant, mais je continue à obtenir l'erreur FONCTION myDb.GREATEST n'existe pas ... J'utilise MySQL 5.0.77 ... – santa

+0

@santa - Intéressant, je ne sais pas pourquoi cela ne fonctionnerait pas. La fonction devrait exister: http://dev.mysql.com/doc/refman/5.0/fr/comparison-operators.html#function_greatest –

+0

Serait-ce parce que je compare les dates (datetime)? Aussi le manuel le montre pour SELECT; pas sûr si je reçois l'erreur parce que je tente de l'utiliser dans ORDER BY ... – santa

0

Vous joignez les tables, ce qui se traduira par des enregistrements des deux tables peigne Ined dans une rangée. Ce que vous devez faire si vous voulez vraiment fusionner des tableaux comme ça, c'est une requête UNION. Quelque chose comme ceci:

SELECT eventName, eventTime FROM (
    SELECT eventName, eventTime 
    FROM t1 

    UNION 

    SELECT eventName, eventTime 
    FROM t2 
) 
ORDER BY eventTime 

Alors, vous fusionnez les résultats des deux tables dans une sous-requête, et vous le tri.

Bonne chance!

+0

Quelles sont les étiquettes de temps d'identification différentes? – santa

+0

Aussi, j'ai besoin d'eux dans une rangée. J'utilise une table pour obtenir les ID des événements et ensuite les parties d'autres tables pour créer une chaîne à afficher. – santa