Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Problem z rozbudowaną kwerendą (subkwerenda, subselect?)
Forum PHP.pl > Forum > Bazy danych > MySQL
chrupka
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.
luckyps
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
Smertius
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
chrupka
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:)
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.