![]() |
![]() |
![]()
Post
#1
|
|
![]() Grupa: Zarejestrowani Postów: 476 Pomógł: 96 Dołączył: 10.04.2008 Skąd: Koszalin Ostrzeżenie: (0%) ![]() ![]() |
Struktura tabeli:
Przykładowe dane
Chcę zliczyć liczbę wystąpień każdej liczby. Dla jednej kolumny nie ma z tym problemu:
Czy da się wykonać zapytanie dla wielu kolumn czy trzeba pobrać wszystkie dane i zliczać je po stronie PHP? -------------------- |
|
|
![]() |
![]()
Post
#2
|
|
![]() Newsman Grupa: Moderatorzy Postów: 4 005 Pomógł: 548 Dołączył: 7.04.2008 Skąd: Trzebinia/Kraków ![]() |
-------------------- |
|
|
![]()
Post
#3
|
|
![]() Grupa: Zarejestrowani Postów: 476 Pomógł: 96 Dołączył: 10.04.2008 Skąd: Koszalin Ostrzeżenie: (0%) ![]() ![]() |
Zapytanie nie przedstawia oczekiwanego efektu.
Zapytanie powinno zwracać np.: Kod Count(*) | Liczba 1 2 1 3 1 6 2 7 3 15 4 25 1 41 1 45 Taki wynik daje zapytanie, które podałem dla jednej kolumny. Zapytanie podane przez Ciebie zwraca: Kod Count(*) 1 1 1 1 1 1 1 1 1 1 -------------------- |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 57 Pomógł: 3 Dołączył: 20.11.2004 Ostrzeżenie: (0%) ![]() ![]() |
Sam zrobiłeś prawie dobre zapytanie. Niestety przez nazwy kolumn trzeba je otoczyć >`< aby MySQL uznał, że liczby są kolumnami. Jeśli masz jeszcze szansę to lepiej zmień strukturę tabeli żeby seria kolumn miała przedrostki, bo penie będziesz przez to miał więcej takich problemów.
Ten post edytował Zigi 27.03.2011, 18:38:51 |
|
|
![]()
Post
#5
|
|
![]() Grupa: Zarejestrowani Postów: 476 Pomógł: 96 Dołączył: 10.04.2008 Skąd: Koszalin Ostrzeżenie: (0%) ![]() ![]() |
To był tylko przykład, kolumny mają inne nazwy.
-------------------- |
|
|
![]()
Post
#6
|
|
![]() Newsman Grupa: Moderatorzy Postów: 4 005 Pomógł: 548 Dołączył: 7.04.2008 Skąd: Trzebinia/Kraków ![]() |
jedyne co wymyśliłem żeby to jakoś sensownie zrobić, to tabela tymczasowa w której masz wszystkie krotki, inaczej jest to niewykonalne (chyba) bez używania programowania proceduralnego i/lub php. pomysł wygląda tak:
mamy tabele: Kod SELECT * FROM test; id | data | j | d | t | c | p | s ----+------------+----+----+----+----+----+---- 1 | 2011-03-01 | 1 | 3 | 21 | 22 | 23 | 24 2 | 2011-03-01 | 2 | 4 | 25 | 26 | 27 | 28 3 | 2011-03-01 | 10 | 1 | 29 | 30 | 41 | 46 4 | 2011-03-01 | 3 | 10 | 28 | 27 | 35 | 10 5 | 2011-03-01 | 4 | 22 | 4 | 9 | 29 | 1 6 | 2011-03-01 | 5 | 33 | 13 | 17 | 44 | 25 7 | 2011-03-01 | 5 | 41 | 2 | 3 | 4 | 5 8 | 2011-03-01 | 6 | 12 | 7 | 8 | 9 | 11 9 | 2011-03-01 | 7 | 8 | 12 | 13 | 14 | 15 10 | 2011-03-01 | 6 | 14 | 16 | 17 | 18 | 19 (10 rows) robimy tymczasowa:
i dodajemy do niej rekordy:
to pomysł trochę uciążliwy bo pewnie trzeba było by jakiegoś triggera dodać który podczas dodawania do tabeli "głównej" dodawał też do tej tymczasowej ale jest to wykonalne. po stronie proceduralnej (nie wiem jak w mysql) ale w postgre na pewno się da. po stronie php to wiadomo - łatwo, prosto i przyjemnie. -------------------- |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 107 Pomógł: 30 Dołączył: 19.02.2011 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
Proponuję drobne uzupełnienie:
Zamiast "gołego" UNION napisz UNION ALL. Powód: "Gołe" UNION z automatu eliminuje powtarzające się wiersze, a tego nie chcesz. Taką eliminację wyłącza właśnie "ALL". |
|
|
![]() ![]() |
![]() |
Aktualny czas: 19.08.2025 - 18:51 |