Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Problem z rozbudowaną kwerendą (subkwerenda, subselect?)
chrupka
post 9.08.2011, 16:10:47
Post #1





Grupa: Zarejestrowani
Postów: 28
Pomógł: 0
Dołączył: 11.01.2007

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


Witam.

Mam pewien problem ze stworzeniem kwerendy w MySQL.

Posiadam dwie tabele, w skrócie:

`recomm_emails` (
`id`
`user_id
`email`
`registered
`active
)

`users` (
`id`
`login`
)

Tabela 'recomm_emails' przechowuje informacje o adresach e-mail, na które zostały wysłane zaproszenia do serwisu.
Pole 'user_id' to ID zarejstrowanego użytkownika, który wysłał zaproszenie na dany e-mail. Pole 'registered' wskazuje 1, gdy zaproszony użytkownik zarejestrował się. Pole 'active' wskazuje 1, gdy zaproszony użytkownik dokonał aktywacji konta po rejestracji.

Mój problem to kwerenda, która w wyniku da mi następującą listę:
- id i login zapraszającego usera
- łączna liczba zaproszonych użytkowników
- liczba zaproszonych użytkowników, którzy dokonali rejestracji i aktywacji konta (registered=1 and active=1)
- liczba zaproszonych użytkowników, którzy dokonali rejestracji ale nie aktywowali konta (registered=1 and active=0)
- liczba zaproszonych użytkowników, którzy nie dokonali rejestracji (registered=0)

Lista ta musi mieć możliwość sortowania po wybranej liczbie z przedstawionych czterech powyżej.

W jaki sposób skonstruować taką kwerendę? Myślę i myślę już od kilku ładnych godzin i wciąż nie mogę stworzyć odpowiedniego rozwiązania.
Z góry dziękuję za pomoc.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 3)
luckyps
post 9.08.2011, 16:33:59
Post #2





Grupa: Zarejestrowani
Postów: 153
Pomógł: 41
Dołączył: 28.06.2011
Skąd: Częstochowa

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


Moze cos takiego ? A jesli nie do konca to moze Ci chociaz troche pomoze.
PS: pisane z glowy wiec moga byc byczki wink.gif

  1. SELECT aaa.user_id,
  2. (SELECT count(*) FROM recomm_emails WHERE recomm_emails.user_id = aaa.user ),
  3. (SELECT count(*) FROM recomm_emails WHERE recomm_emails.user_id = aaa.user AND recomm_emails.registered=1 AND recomm_emails.active=1 ),
  4. (SELECT count(*) FROM recomm_emails WHERE recomm_emails.user_id = aaa.user AND recomm_emails.registered=1 AND recomm_emails.active=0 ),
  5. (SELECT count(*) FROM recomm_emails WHERE recomm_emails.user_id = aaa.user AND recomm_emails.registered=0 )
  6. FROM recomm_emails aaa
Go to the top of the page
+Quote Post
Smertius
post 9.08.2011, 18:23:41
Post #3





Grupa: Zarejestrowani
Postów: 156
Pomógł: 31
Dołączył: 23.02.2009
Skąd: Sanok

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


Może lepiej tak niż robić 4 podzapytania wink.gif
  1. SELECT users.id, users.login,
  2. COUNT(recomm_emails.id) AS liczba_wszystkich_zaproszonych,
  3. COUNT(IF(recomm_emails.registered=1 AND recomm_emails.active=1,recomm_emails.id, NULL )) AS aktywacja_i_rejestracja,
  4. COUNT(IF(recomm_emails.registered=1 AND recomm_emails.active=0,recomm_emails.id, NULL )) AS rejestracja_bez_aktywacji,
  5. COUNT(IF(recomm_emails.registered=1,recomm_emails.id, NULL )) AS bez_rejestracji
  6. FROM recomm_emails
  7. LEFT JOIN users ON users.id = recomm_emails.user_id GROUP BY users.id
Go to the top of the page
+Quote Post
chrupka
post 9.08.2011, 19:22:54
Post #4





Grupa: Zarejestrowani
Postów: 28
Pomógł: 0
Dołączył: 11.01.2007

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


wielkie dzięki za szybką odpowiedź! normalnie pogłowiłabym się nad tym jeszcze chwilę, ale czas mnie goni.

luckyps - rozwiązanie działa:) dodałam sobie jeszcze sortowanie do wyboru po wszystkich z 4 tych liczb + przedział czasowy.

Smertius, również dzięki za podpowiedźsmile.gif spróbuję jutro czy to działa, bo dziś już jestem przeprogramowana:)
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 14.08.2025 - 09:05