La meilleure façon est de créer une nouvelle table contenant les champs communs des trois autres tables et d'ajouter un index sur le champ de date commun. Les trois tables d'origine doivent contenir une clé étrangère liée à la table commune. Avec cette conception, la requête devient simple :
SELECT *
FROM common_table
ORDER BY "date" DESC
LIMIT 100
Si vous avez également besoin de données provenant de tables plus spécifiques, vous pouvez utiliser des LEFT JOIN pour également sélectionner ces données dans la même requête.
Si vous ne pouvez pas modifier votre conception et que les performances ne posent pas de problème, vous pouvez utiliser UNION ALL pour combiner les résultats des trois tables avant le tri :
SELECT * FROM table1
UNION ALL
SELECT * FROM table2
UNION ALL
SELECT * FROM table3
ORDER BY "date" DESC
LIMIT 100
Notez que ce qui précède ne fonctionnera que si toutes les tables ont la même structure. Si vous avez des champs qui apparaissent dans une table mais pas dans d'autres, vous devez les omettre du SELECT ou bien renvoyer NULL pour cette colonne dans les autres tables. Par exemple si :
table1
a des colonnesa
,b
,c
etdate
.table2
a des colonnesb
,c
etdate
.table3
a des colonnesa
,c
etdate
.
Alors utilisez ceci :
SELECT a, b, c, "date"
FROM table1
UNION ALL
SELECT NULL AS a, b, c, "date"
FROM table2
UNION ALL
SELECT a, NULL as b, c, "date"
FROM table3
ORDER BY "date" DESC
LIMIT 100