Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MySQL] drobny problem z UNION ALL
kkuubbaa88
post
Post #1





Grupa: Zarejestrowani
Postów: 510
Pomógł: 1
Dołączył: 27.08.2007

Ostrzeżenie: (0%)
-----


witam

mam przykladowe zapytanie, ktore nie chce dzialac tak jak powinno...
  1. (SELECT zmienna1,zmienna2,zmienna3,zmienna4,zmienna5,zmienna6 FROM tabela1 INNER JOIN tabela2 ON tabela1.id = tabela2.id INNER JOIN tabela3 ON tabela1.id = tabela3.id INNER JOIN tabela4 ON tabela_1.opis = tabela_4.zapis INNER JOIN tabela5 ON tabela1.id = tabela5.id WHERE zmienna2 > 2 ORDER BY id DESC)
  2. UNION ALL
  3. (SELECT zmienna1,zmienna2,zmienna3,zmienna4,zmienna5,zmienna6 FROM tabela1 INNER JOIN tabela2 ON tabela1.id = tabela2.id INNER JOIN tabela3 ON tabela1.id = tabela3.id INNER JOIN tabela4 ON tabela_1.opis = tabela_4.zapis INNER JOIN tabela5 ON tabela1.id = tabela5.id WHERE zmienna2 < 3 ORDER BY id DESC)
  4. LIMIT 0,15;

zapytanie jest wykonywane, ale niestety wyniki nie sa segregowane. sprawdzałem kazdo osobne zapytanie i poprawnie segreguje... po zlaczeniu niestety nie chce. dlaczego ? co powinienem zmienić ?

nazwy kolumn, typy danych, liczba kolumno, kolejnosc kolumn, wszystko się zgadza. juz naprawdę nie wiem o co może być problem... może powodem jest to samo zrodlo zmiennych ?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 2)
neuroine
post
Post #2





Grupa: Zarejestrowani
Postów: 21
Pomógł: 3
Dołączył: 6.05.2009

Ostrzeżenie: (0%)
-----


Na moje oko to powinno być tak.
  1. (SELECT zmienna1,zmienna2,zmienna3,zmienna4,zmienna5,zmienna6 FROM tabela1 INNER JOIN tabela2 ON tabela1.id = tabela2.id INNER JOIN tabela3 ON tabela1.id = tabela3.id INNER JOIN tabela4 ON tabela_1.opis = tabela_4.zapis INNER JOIN tabela5 ON tabela1.id = tabela5.id WHERE zmienna2 > 2 ORDER BY id DESC)
  2. UNION ALL
  3. (SELECT zmienna1,zmienna2,zmienna3,zmienna4,zmienna5,zmienna6 FROM tabela1 INNER JOIN tabela2 ON tabela1.id = tabela2.id INNER JOIN tabela3 ON tabela1.id = tabela3.id INNER JOIN tabela4 ON tabela_1.opis = tabela_4.zapis INNER JOIN tabela5 ON tabela1.id = tabela5.id WHERE zmienna2 < 3 ORDER BY id DESC)
  4. ORDER BY id DESC LIMIT 0,15;


na końcu jeszcze raz ORDER BY id DESC

Ten post edytował neuroine 17.06.2010, 21:08:46
Go to the top of the page
+Quote Post
kkuubbaa88
post
Post #3





Grupa: Zarejestrowani
Postów: 510
Pomógł: 1
Dołączył: 27.08.2007

Ostrzeżenie: (0%)
-----


jednak nie do konca (IMG:style_emoticons/default/smile.gif) poczytalem i w końcu zrobiłem (IMG:style_emoticons/default/smile.gif)

w zapytaniach union mozna uzyc tylko raz ORDER BY na samym koncu i tylko do zmiennych z pierwszego selecta. dlatego chcąc stworzyc dwie odrebne grupy z sortowaniem trzeba było do pierwszego zapytania dodac alias np( 1 as 'sort') do drugiego (2 as 'sort') i potem pod koniec najpierw order by sort a nastepnie potem wedlug jakiejs zmiennej (IMG:style_emoticons/default/smile.gif) i po problemie. calosc powinna wygladac:

  1. (SELECT 1 AS 'sort',zmienna1,zmienna2,zmienna3,zmienna4,zmienna5,zmienna6 FROM tabela1 INNER JOIN tabela2 ON tabela1.id = tabela2.id INNER JOIN tabela3 ON tabela1.id = tabela3.id INNER JOIN tabela4 ON tabela_1.opis = tabela_4.zapis INNER JOIN tabela5 ON tabela1.id = tabela5.id WHERE zmienna2 > 2)
  2. UNION ALL
  3. (SELECT 2 AS 'sort',zmienna1,zmienna2,zmienna3,zmienna4,zmienna5,zmienna6 FROM tabela1 INNER JOIN tabela2 ON tabela1.id = tabela2.id INNER JOIN tabela3 ON tabela1.id = tabela3.id INNER JOIN tabela4 ON tabela_1.opis = tabela_4.zapis INNER JOIN tabela5 ON tabela1.id = tabela5.id WHERE zmienna2 < 3)
  4. ORDER BY sort DESC, id DESC LIMIT 0,15;


Ten post edytował kkuubbaa88 18.06.2010, 09:59:15
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 23.08.2025 - 08:10