2009-08-10 15 views
0

J'ai trois tables, chacune contenant une PK auto-incrémentante. Je dois sélectionner les dernières entrées (c.-à-d. ORDERBY DESC) du mélange de ces tables. Je voudrais le faire dans une requête, avec deux jointures. Mon idée était de sélectionner en quelque sorte une table, de la commander par id DESC, puis de fusionner les résultats. Est-ce que quelqu'un a un moyen (ou probablement une meilleure idée) de le faire?instructions orderby sur plusieurs jointures

(en utilisant MySQL) EDIT: Désolé - voici une spécification plus détaillée: J'ai trois tables, posts, stories, favs. Chacun a (au moins) trois colonnes id, uid et date. Ils sont les deux PK. id auto-incréments (séparément pour chaque table). uid est FK, mais ce n'est pas pertinent. J'ai besoin du jeu de résultats pour contenir les 20 ou 30 dernières entrées. UNION sans jointure serait une possibilite.

+2

Quels sont les domaines auxquels vous souhaitez participer? Voulez-vous dire union par hasard? – Zed

Répondre

0

Puisque les tables n'ont aucune relation, les joindre n'a aucun sens, non? Dans la mesure où j'ai compris, vous voudriez commander des enregistrements provenant de 3 tables différentes dans un ensemble de résultats par leur date de création. Il y a deux façons de réaliser ceci:

  1. Utilisez un PK qui est triable et unique pour les 3 tables. Je sais que vous pouvez le faire facilement dans PostgreSQL. En MySQL Vous avez besoin d'une solution de contournement: Créez une 4ème table avec un PK auto-incrémenté et remplacez les 3 autres PK par un FK pointant sur la 4ème table PK. Ceci est quelque peu compliqué et vous devez être conscient du fait qu'un champ d'auto-incrémentation n'est pas un bon candidat pour une propriété triable de manière fiable (la suppression d'enregistrements entraîne des trous dans la séquence, qui pourraient être remplis plus tard). Ajouter une colonne created à chacune des 3 tables et stocker la date de création de chaque enregistrement. L'UNION peut ensuite être triée par cette colonne. Vous avez déjà une colonne date. Vous ne pouvez pas utiliser cette colonne?

Questions connexes