Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Jedna tabela, jedna komórka i dwie wartości
krysk
post
Post #1





Grupa: Zarejestrowani
Postów: 146
Pomógł: 0
Dołączył: 20.04.2002
Skąd: Szczecin

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


Tabela:

+---+------+-----+
|id | id_a | ret |
+---+------+-----+
| 1 | 1 | y |
+---+------+-----+
| 2 | 1 | y |
+---+------+-----+
| 3 | 1 | n |
+---+------+-----+


Czy istnieje możliwość pobrania poprzez jedno zapytanie ile razy dla każdego id_a pole ret ma wartość 'y' a ile razy 'n'? Jeśli tak, to w jaki sposób? Czym powinienem się bliżej zainteresować?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 4)
Cezar708
post
Post #2





Grupa: Zarejestrowani
Postów: 1 116
Pomógł: 119
Dołączył: 10.05.2005
Skąd: Poznań

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


da radę
  1. SELECT id_a, count(ret) AS liczba, 'y' AS ret_val
  2. FROM tabela WHERE ret='y'
  3. GROUP BY id_a
  4. UNION
  5. SELECT id_a, count(ret) AS liczba, 'n' AS ret_val
  6. FROM tabela WHERE ret='n'
  7. GROUP BY id_a


dla Twojego przykładu w wyniku otrzymasz:
Kod
+------+--------+--------
| id_a | liczba | ret_val
+------+--------+--------
| 1 |   2    |  y
+---+--------+--------
| 1 |   1    |  n
+------+--------+--------
Go to the top of the page
+Quote Post
krysk
post
Post #3





Grupa: Zarejestrowani
Postów: 146
Pomógł: 0
Dołączył: 20.04.2002
Skąd: Szczecin

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


To już duży postęp dla mnie, jednakże miałem na myśli stworzenie dwóch dodatkowych "kolumn" - ret_y i ret_n gdzie to byłyby liczby z ilością tychże wartości.
Go to the top of the page
+Quote Post
Cezar708
post
Post #4





Grupa: Zarejestrowani
Postów: 1 116
Pomógł: 119
Dołączył: 10.05.2005
Skąd: Poznań

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


zbudowałem takie zapytanie i wyobraź sobie zadziałało:
  1. SELECT
  2. id_a AS tst,
  3. (SELECT count(*) FROM tabela WHERE ret='y' AND id_a=tst) AS liczba_y,
  4. (SELECT count(*) FROM tabela WHERE ret='n' AND id_a=tst) AS liczba_n
  5. FROM tabela GROUP BY id_a;


dane w tabeli:
Kod
+----+------+------+
| id | id_a | ret  |
+----+------+------+
|  1 |    1 | y    |
|  2 |    1 | y    |
|  3 |    1 | n    |
|  4 |    2 | n    |
+----+------+------+


po wykonaniu zapytania wynik:
Kod
+------+----------+----------+
| tst  | liczba_y | liczba_n |
+------+----------+----------+
|    1 |        2 |        1 |
|    2 |        0 |        1 |
+------+----------+----------+


myślę, że to spełni oczekiwania, aczkolwiek nie jest to najszybszy sposób i wymagane są podzapytania
Go to the top of the page
+Quote Post
kitol
post
Post #5





Grupa: Zarejestrowani
Postów: 162
Pomógł: 26
Dołączył: 19.01.2007

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


Myślę, że to będzie najbardziej optymalne:
  1. SELECT id_a, SUM(yes) AS ile_y, COUNT(*)-SUM(yes) AS ile_n
  2. FROM (SELECT id_a,IF(ret='y',1,0) AS yes FROM tabela) a GROUP BY id_a


Ten post edytował kitol 11.01.2008, 21:40:03
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 - 10:34