2011-06-03 6 views
3

J'ai plusieurs instructions de sélection de différentes tables sur la même base de données. J'utilisais plusieurs requêtes séparées puis je chargeais mon tableau et mon tri (encore une fois, après avoir commandé une requête).Meilleure façon de combiner plusieurs requêtes select mysql avancées

Je voudrais combiner en une seule déclaration pour accélérer les résultats et le rendre plus facile à « charge plus » (voir en bas).

Chaque requête utilise SELECT, LEFT JOIN, WHERE et ORDER BY des commandes qui ne sont pas les mêmes pour chaque table.

Je ne peux pas besoin d'ordre par chaque déclaration, mais je veux le résultat final, en fin de compte, à commander par un champ représentant un temps (pas nécessairement le même nom sur le terrain dans toutes les tables).

Je voudrais limiter les résultats totaux de la requête à un certain nombre, dans mon cas 100.

J'utilise ensuite une boucle à travers les résultats et pour chaque ligne I test si OBJECTNAME_ID (c.-à-; comment_id, event_id, upload_id) isset puis LOAD_WHATEVER_OBJECT qui prend la ligne et pousse les données dans un tableau.

Je n'aurai pas à trier le tableau après, car il a été chargé dans l'ordre via mysql.

Plus tard dans l'application, je vais "charger plus" en sautant la première page 100, 200 ou autre * 100 est et limiter de 100 à nouveau avec la même requête.

Le résultat final de la base de données serait pref ressemblent à « cette »:

Résultat - champs sélectionnés à partir d'une table - champ pour trier est le plus grand résultat - champs sélectionnés à partir d'une table peut-être différent - champ pour trier On est ici plus RESULTAT - sélectionnés Les champs d'une table de table peut-être différent - champ pour trier est le troisième plus grand etc, etc

Je vois beaucoup de déclarations combinées plus simples, mais rien tout à fait comme ça.

Toute aide serait grandement appréciée.

+1

En savoir plus sur JOIN et la syntaxe UNION sur les docs MySQL. – Rasika

Répondre

2

manière la plus simple pourrait être une UNION ici (http://dev.mysql.com/doc/refman/5.0/en/union.html):

(SELECT a,b,c FROM t1) 
UNION 
(SELECT d AS a, e AS b, f AS c FROM t2) 
ORDER BY a DESC 
+0

Merci! .. Je pense que ce serait plus difficile avec les commandes supplémentaires dans ce lol. Je vais mettre à jour ici comment cela fonctionne. On dirait que je peux utiliser une référence à commander aussi, très cool. –

+0

Les tables et les sélections ont toutes un nombre de colonnes différent. C'est différent pour chaque table. –

+0

Pouvez-vous donner un exemple? Est-il impossible de remplir les colonnes manquantes avec des valeurs NULL ou des chaînes vides? quelque chose comme SELECT ... NULL comme NA_col1, "" comme NA_col2 ... – iHaveacomputer

Questions connexes