Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL] drobny problem z UNION ALL
Forum PHP.pl > Forum > Przedszkole
kkuubbaa88
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 ?
neuroine
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
kkuubbaa88
jednak nie do konca smile.gif poczytalem i w końcu zrobiłem 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 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;
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.