Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Zliczanie wartości z wielu kolumn
pitu
post
Post #1





Grupa: Zarejestrowani
Postów: 476
Pomógł: 96
Dołączył: 10.04.2008
Skąd: Koszalin

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


Struktura tabeli:
  1. CREATE TABLE `liczby` (
  2. `ID` int(15) NOT NULL AUTO_INCREMENT,
  3. `Data` date NOT NULL,
  4. `1` int(2) NOT NULL,
  5. `2` int(11) NOT NULL,
  6. `3` int(11) NOT NULL,
  7. `4` int(11) NOT NULL,
  8. `5` int(11) NOT NULL,
  9. `6` int(11) NOT NULL,
  10. PRIMARY KEY (`ID`)
  11. )


Przykładowe dane
  1. INSERT INTO `liczby` (`ID`, `Data`, `1`, `2`, `3`, `4`, `5`, `6`) VALUES
  2. (1, '2011-03-01', 1, 3, 21, 22, 23, 24),
  3. (2, '2011-03-01', 2, 4, 25, 26, 27, 28),
  4. (3, '2011-03-01', 10, 1, 29, 30, 41, 46),
  5. (4, '2011-03-01', 3, 10, 28, 27, 35, 10),
  6. (5, '2011-03-01', 4, 22, 4, 9, 29, 1),
  7. (6, '2011-03-01', 5, 33, 13, 17, 44, 25),
  8. (7, '2011-03-01', 5, 41, 2, 3, 4, 5),
  9. (8, '2011-03-01', 6, 12, 7, 8, 9, 11),
  10. (9, '2011-03-01', 7, 8, 12, 13, 14, 15),
  11. (10, '2011-03-01', 6, 14, 16, 17, 18, 19);


Chcę zliczyć liczbę wystąpień każdej liczby. Dla jednej kolumny nie ma z tym problemu:
  1. SELECT COUNT(*), 1 FROM liczby GROUP BY 1


Czy da się wykonać zapytanie dla wielu kolumn czy trzeba pobrać wszystkie dane i zliczać je po stronie PHP?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
piotrooo89
post
Post #2


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:

  1. CREATE TABLE test_tmp (id serial, DATA date, value integer);


i dodajemy do niej rekordy:

  1. INSERT INTO test_tmp (id, DATA, value)
  2. SELECT id, DATA, j FROM test
  3. UNION
  4. SELECT id, DATA, d FROM test
  5. UNION
  6. SELECT id, DATA, t FROM test
  7. UNION
  8. SELECT id, DATA, c FROM test
  9. UNION
  10. SELECT id, DATA, p FROM test
  11. UNION
  12. SELECT id, DATA, s FROM test;


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.
Go to the top of the page
+Quote Post

Posty w temacie


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: 28.12.2025 - 00:14