![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 15 Pomógł: 0 Dołączył: 9.08.2010 Ostrzeżenie: (0%) ![]() ![]() |
Chciałbym pobrać dane z tabeli posortowane rosnąco, okrojone wieloma warunkami WHERE a do tego ustawiające wartości zerowe (sortowanie względem pól daty, więc wartości zerowe to 0000-00-00) na samym końcu. Mam problemy z tym ostatnim. Czy jest na to jakaś komenda? Proszę o pomoc.
|
|
|
![]()
Post
#2
|
|
Grupa: Moderatorzy Postów: 8 989 Pomógł: 1550 Dołączył: 8.08.2008 Skąd: Słupsk/Gdańsk ![]() |
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 15 Pomógł: 0 Dołączył: 9.08.2010 Ostrzeżenie: (0%) ![]() ![]() |
Coś nie działa. Tzn działa ale nie otrzymuję posortowanego wyniku. Może pokażę na przykładzie o co mi chodzi (IMG:style_emoticons/default/snitch.gif) .
Gdy "ORDER BY data" znajduje się w tym miejscu, co w napisanym przeze mnie kodzie, to mysql_query nie zwraca nic. Gdy wstawiam "ORDER BY data" przed LIMIT $a,$b to efekt jest ten sam, jak gdy nie używałem UNION. Wartości zerowe są przesuwane na sam początek (IMG:style_emoticons/default/sad.gif) . Ten post edytował kóki 12.09.2010, 15:14:52 |
|
|
![]()
Post
#4
|
|
Grupa: Moderatorzy Postów: 8 989 Pomógł: 1550 Dołączył: 8.08.2008 Skąd: Słupsk/Gdańsk ![]() |
|
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 15 Pomógł: 0 Dołączył: 9.08.2010 Ostrzeżenie: (0%) ![]() ![]() |
Hm, dziwne, ale otrzymuję nieposortowany wynik
|
|
|
![]()
Post
#6
|
|
Grupa: Moderatorzy Postów: 8 989 Pomógł: 1550 Dołączył: 8.08.2008 Skąd: Słupsk/Gdańsk ![]() |
No to podaj wynik oraz strukturę tabeli (SHOW CREATE TABLE)
Ten post edytował wookieb 12.09.2010, 17:05:07 |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 15 Pomógł: 0 Dołączył: 9.08.2010 Ostrzeżenie: (0%) ![]() ![]() |
2013-03-15
2010-11-30 2010-09-30 2010-09-27 2010-09-17 2010-09-28 2010-09-30 2010-09-28 2010-09-09 2010-09-10 2010-09-26 2010-09-16 2010-09-29 2010-09-11 2010-09-21 2010-09-29 2010-09-16 2010-09-24 2010-09-11 2010-09-11 2010-09-28 2010-09-29 2010-09-11 2010-09-23 2010-09-24 2010-09-21 2010-09-20 2010-09-27 2010-09-21 2010-09-17 2010-09-26 2010-09-22 2010-09-17 2010-09-11 2010-09-10 2010-09-30 0000-00-00 0000-00-00 Zera niby są na końcu. ale wszystkie poprzednie wartości są posortowane względem ID . Czyli tak jakby nie były sortowane. |
|
|
![]()
Post
#8
|
|
Grupa: Moderatorzy Postów: 8 989 Pomógł: 1550 Dołączył: 8.08.2008 Skąd: Słupsk/Gdańsk ![]() |
Dziwne. Jaki masz typ pola przechowującego twoją datę?
No i nie podałeś struktury tabeli :/ A tak to już byśmy znali odpowiedź. Ten post edytował wookieb 13.09.2010, 10:01:37 |
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 15 Pomógł: 0 Dołączył: 9.08.2010 Ostrzeżenie: (0%) ![]() ![]() |
Data przechowywana jest jako "date". |
|
|
![]()
Post
#10
|
|
Grupa: Moderatorzy Postów: 8 989 Pomógł: 1550 Dołączył: 8.08.2008 Skąd: Słupsk/Gdańsk ![]() |
Pokaż teraz całe zapytanie wybierające rekordy z którym masz problem.
|
|
|
![]()
Post
#11
|
|
Grupa: Zarejestrowani Postów: 15 Pomógł: 0 Dołączył: 9.08.2010 Ostrzeżenie: (0%) ![]() ![]() |
Przepraszam, ale nie jestem pewien co masz na myśli.
Ale tego typu polecenie nie działa na żadnym z przykładów. W momencie gdy używam union to sortowanie przestaje działać. (No chyba, że sortuję już połączone wyniki. Ale wszystkie wiersze gdzie data jest różna od 0000-00-00 i wszystkie gdzie jest równa 0000-00-00 to i tak to samo co wszystkie wiersze. Czyli jestem w tym samym miejscu.) Dopóki nie łączę dwóch selectów to normalnie mi sortuje te daty w każdym select'ie. To wygląda jakby UNION psuło kolejność. Zapamiętuje parę zbiorów i zna ich kolejność względem siebie ale miesza kolejność wartości w ich wnętrzu. Może się mylę, ale wydaje mi się, że w taki sposób tego nie obejdę :C. |
|
|
![]()
Post
#12
|
|
Grupa: Moderatorzy Postów: 8 989 Pomógł: 1550 Dołączył: 8.08.2008 Skąd: Słupsk/Gdańsk ![]() |
Podaj zapytanie z UNION jakie dajesz
Podaj też wersję MYSQL |
|
|
![]()
Post
#13
|
|
Grupa: Zarejestrowani Postów: 15 Pomógł: 0 Dołączył: 9.08.2010 Ostrzeżenie: (0%) ![]() ![]() |
ale powiem szczerze, że próbowałem też dziesiątki innych kombinacji. Nawet takich najgłupszych. Na zasadzie "a nóż chwyci". Zawsze gdy łączę dwa SELECTy UNIONEM to wartości w każdym z tych selectów są nieposortowane . 5.1.49-1 |
|
|
![]()
Post
#14
|
|
Grupa: Zarejestrowani Postów: 226 Pomógł: 61 Dołączył: 20.08.2010 Ostrzeżenie: (0%) ![]() ![]() |
UNION w MySQL chyba ignoruje sortowanie (nie wiem dlaczego)
Zrób:
`data` = '0000-00-00' zwraca 1 jeśli są równe i 0 jeśli różne. Jako że 1 jest większe od 0, to daty 0000-00-00 będą na końcu, a wszystkie inne na początku. |
|
|
![]()
Post
#15
|
|
Grupa: Moderatorzy Postów: 8 989 Pomógł: 1550 Dołączył: 8.08.2008 Skąd: Słupsk/Gdańsk ![]() |
Faktycznie UNION ignoruje kolejność ale TYLKo w tym przypadku kiedy w pojedynczych zapytaniach nie podamy LIMIT. Dziwne, aczkolwiek NOIDEA podał prawidłowa rozwiązanie.
Przepraszam za wprowadzenie w błąd. Czeka mnie porządna lektura manuala Mysql :/ |
|
|
![]()
Post
#16
|
|
Grupa: Zarejestrowani Postów: 15 Pomógł: 0 Dołączył: 9.08.2010 Ostrzeżenie: (0%) ![]() ![]() |
Bardzo dziękuję. Sposób podany przez Noidea działa.
Cytat Przepraszam za wprowadzenie w błąd. Nie ma za co. Dzięki za czujność i dobre chęci (IMG:style_emoticons/default/smile.gif) . |
|
|
![]() ![]() |
![]() |
Aktualny czas: 23.08.2025 - 00:51 |