webForumDet fria alternativet

Hämta antal från olika tidsperioder i en och samma query

Databaser & SQL

3 svar · 793 visningar · startad av timmyrosen

Medlem sedan okt. 20116 inlägg
Frågan#1

Hej

Är verkligen ingen hejjare på mysql så hoppades på att få lite hjälp här.

Det är så att jag vill hämta ut antalet medlemmar som registrerade sig från olika tidsperioder. Jag har satt upp tidsstämplarna och gjort en query och den returnerar den första querien men resten skrivs inte ut.

Här är koden:

$date['month'] = mktime(0, 0, 0, date('m'), 1, date('Y'));
$date['week'] = mktime(0, 0, 0, date('m'), date('d'), date('Y')) - ((date('N')-1)*3600*24);
$date['yesterday'] = mktime(0, 0, 0, date('m'), date('d')-1, date('Y'));
$date['today'] = mktime(0, 0, 0, date('m'), date('d'), date('Y'));
$date['now'] = mktime(time('H'), time('i')-20, date('s'), date('m'), date('d'), date('Y')); 
 
$members = mysql_query("(SELECT COUNT(id) AS m_total FROM accounts) 
                  UNION 
               (SELECT COUNT(id) AS m_month FROM accounts WHERE registered >= '".$date['month']."') 
                  UNION 
               (SELECT COUNT(id) AS m_week FROM accounts WHERE registered >= '".$date['week']."')
                  UNION
               (SELECT COUNT(id) AS m_yesterday FROM accounts WHERE registered >= '".$date['yesterday']."')
                  UNION
               (SELECT COUNT(id) AS m_today FROM accounts WHERE registered >= '".$date['today']."')
");
$m = mysql_fetch_assoc($members);

Den ger ett värde till m_total men allt annat får inget värde. Någon som kan hjälpa mig med detta eller rent av göra en bättre query. Som sagt, är inte så bra på MySQL.

Tacksam för hjälp

Medlem sedan juni 200032 967 inlägg
#2

Det din SQL-fråga returnerar är ett resultat med en kolumn, som heter m_total, med x antal rader (du kan inte vara säker på att du får ut värden för alla dina fall - union ger ett distinct resultat.)

Det enklaste är nog att köra dessa frågor som rena subqueries istället för att använda union. Skulle kunna se ut så här:

$members = mysql_query("SELECT COUNT(id) AS m_total,  
                  (SELECT COUNT(id) FROM accounts WHERE registered >= '".$date['month']."') as m_month,
                  (SELECT COUNT(id) FROM accounts WHERE registered >= '".$date['week']."') as m_week,
                  (SELECT COUNT(id) FROM accounts WHERE registered >= '".$date['yesterday']."') as m_yesterday,
                  (SELECT COUNT(id) FROM accounts WHERE registered >= '".$date['today']."') as m_today FROM accounts
");

Tänk också på att m_yesterday-delen även inkluderar dagens registreringar. Är det så du vill ha det?

mvh

Medlem sedan okt. 20116 inlägg
#3

Tack så mycket, den querien fungerade mycket bättre :)

Nej, jag missade det där med m_yesterday, tack för att du sa det :)

Medlem sedan juni 200032 967 inlägg
#4

Varsågod!

Klicka gärna på "Markera som lösning" vid mitt inlägg.

http://www.webforum.nu/faq.php?faq=vb_faq#faq_faq_acceptance

mvh

436 ms totalt · 4 externa anrop · v20260731065814-full.6fe65c25
119 ms — deklarationer (db)
0 ms — hämta statistik (cache)
307 ms — hämta tråd, inlägg och bilagor (db)
127 ms — ändringar (db)