Wpis z mikrobloga

Mirki z #bazydanych #sql #mysql potrzebuję małej pomocy od kogoś trochę bardziej obytego z zapytaniami.
Mam 2 tabelę - jedna, o nazwie page - przechowuje informacje o stronach, id, nazwa itd.
druga tabela przechowuje informację o poszczególnych wyświetleniach użytkowników - nazywa się view, posiada pola id, useragent, id strony(id z tabeli page) oraz datę.
Pytanie brzmi - jak za jednym zamachem otrzymać pełną informację o stronie ORAZ ilość jej wyświetleń ogólnie ORAZ ilość wyświetleń dzisiaj.
Udało mi się skleić coś takiego:
select page.*, count(view.id) as viewsALL, FROM page LEFT JOIN view on(view.id_page = page.id) GROUP BY page.id;
wygląda na to, że działa, ale oczywiście nie spełnia ostatniego warunku - nie wyświetla oddzielnie wyświetleń z dnia dzisiejszego. Da się w ogóle zrobić w postaci prostego zapytania czy większe czary będą potrzebne?
  • 15
@g500s: Bez problemu da radę.
Najważniejsze - COUNT(wyrażenie) liczy TYLKO wiersze, które nie są nullami (przynajmniej jest tak w standardzie SQL). Dlatego robisz COUNT(CASE WHEN... ELSE NULL END)
@Ginden: wielkie dzięki za pomoc! przyznam się, że nie używałem nigdy case w sql.
Skleiłem coś takiego:
select page.*, count(view.id) as viewsALL, count(case when date(data) = CURDATE() THEN 1 ELSE 0 END) as viewsToday FROM page LEFT JOIN view on(view.idpage = page.id) WHERE iduser=9 GROUP BY page.id ORDER BY page.id DESC;

no i nie działa tak jak trzeba, w rekordach, które w ogóle nie mają żadnych wyświetleń(wpisów
@g500s: Ja się nauczyłem podstaw z jakiejś książki ojca z okolic roku 1997, nie pomogę Ci.
Ale coś więcej niż proste selecty nauczyłem się klepać dopiero jak zostałem zawodowym programistą T-SQLa.
@plushy: po to, że chciałbym się rozwijać. To, że teraz używam mysql nie oznacza, że do końca życia niczego innego nie będę używał - przeczytam książkę, stanę się bardziej świadomy tego czego używam, a czego nie używam i będzie fajnie :)