2010-01-29 5 views
2

Je voudrais faire une seule requête sur une table sans utiliser UNIONComment puis-je écrire cette requête MYSQL sans utiliser UNION?

Voici les deux requêtes que j'ai besoin de combiner.

SELECT field1, field2, field3 FROM table1 WHERE field4 != 'condition1' AND feild3 >= 'condition2' ORDER BY field3 ASC LIMIT 20; 
SELECT field1, field2, field3 FROM table1 WHERE field4 != 'condition1' AND feild3 < 'condition2' ORDER BY field3 DESC LIMIT 5; 

Fondamentalement, je suis en train d'obtenir 20 dossiers au-dessus d'un certain enregistrement (commandé par field3, pas l'ID), et 5 enregistrements ci-dessous, sans saisir le dossier lui-même dans les résultats.

L'astuce est, je ne peux pas utiliser UNION.

+1

Si vous utilisez> = et <=, vous pouvez obtenir une ligne en double. Est-ce ce que tu veux? –

+0

Est-ce que ce sont les devoirs? Quelle autre raison auriez-vous pour interdire l'union? –

+0

@ St.Woland: Vous avez raison. J'ai édité l'exemple pour montrer> = et <. @ Jørn: C'est assez drôle. En fait, j'essaie de construire une requête dans le framework CakePHP, et UNION n'est pas supporté nativement. Je suis en train de mettre à jour une ancienne application héritée qui a simplement exécuté deux requêtes distinctes. – Stephen

Répondre

1

Vous pouvez faire quelque chose comme ce qui suit -

select a.*, b.* 
from (select field1, field2, field3 
     from table1 
     where field4 != 'condition1' 
     and feild3 >= 'condition2' 
     order by field3 ASC 
     limit 20) a, 
    (select field1, field2, field3 
     from table1 
     where field4 != 'condition1' 
     and feild3 < 'condition2' 
     order my field3 desc 
     limit 5) b 
+0

Vous ne joignez pas la sous-requête 'a' et la sous-requête' b' sans condition? Cela retournerait beaucoup plus de lignes que prévu. –

+0

Cela semble bon. L'utilisation de sous-requêtes dans cakePHP est un travail difficile. Je voulais éviter d'utiliser $ this-> Model-> query, mais bon. – Stephen

Questions connexes