!acidforums [hr] [b][u]1. Users by usergroup:[/u][/b] % SELECT % g.title, % COUNT(*) % FROM % users u INNER JOIN usergroups g ON u.usergroup = g.gid % GROUP BY % g.gid % HAVING % COUNT(*) > 0 % ORDER BY % 1 [b][u]2. New users this month by usergroup:[/u][/b] % SELECT % g.title, % COUNT(*) % FROM % users u INNER JOIN usergroups g ON u.usergroup = g.gid % WHERE % YEAR(FROM_UNIXTIME(u.regdate)) = YEAR(UTC_DATE() - INTERVAL 10 DAY) AND % MONTH(FROM_UNIXTIME(u.regdate)) = MONTH(UTC_DATE() - INTERVAL 10 DAY) % GROUP BY % g.gid % HAVING % COUNT(*) > 0 % ORDER BY % 1 [b][u]3. Usage of forum themes:[/u][/b] % SELECT % t.name, % COUNT(*) % FROM % themes t INNER JOIN ( % SELECT % CASE style WHEN 0 THEN 2 ELSE style END AS style % FROM % users % ) u ON t.tid = u.style % GROUP BY % t.tid % HAVING % COUNT(*) > 0 % ORDER BY % 1 [b][u]4. Monthly activity breakdown by forum sections:[/u][/b] % SELECT % f.name, % COUNT(*) % FROM % posts p INNER JOIN ( % SELECT % fl.fid as fid, % fl.name as name, % pf.disporder as order1, % fl.disporder as order2 % FROM % forums fl INNER JOIN forums pf on fl.pid = pf.fid % WHERE % fl.type = 'f' AND % fl.name <> 'Blogs' % ) f ON p.fid = f.fid % WHERE % p.visible = 1 AND % YEAR(FROM_UNIXTIME(p.dateline)) = YEAR(UTC_DATE() - INTERVAL 10 DAY) AND % MONTH(FROM_UNIXTIME(p.dateline)) = MONTH(UTC_DATE() - INTERVAL 10 DAY) % GROUP BY % f.fid % HAVING % COUNT(*) > 0 % ORDER BY % f.order1, f.order2 [b][u]5. Threads made this month by forum section:[/u][/b] % SELECT % f.name, % COUNT(*) % FROM % threads t INNER JOIN ( % SELECT % fl.fid as fid, % fl.name as name, % pf.disporder as order1, % fl.disporder as order2 % FROM % forums fl INNER JOIN forums pf on fl.pid = pf.fid % WHERE % fl.type = 'f' AND % fl.name <> 'Blogs' % ) f ON t.fid = f.fid % WHERE % t.visible = 1 AND % YEAR(FROM_UNIXTIME(t.dateline)) = YEAR(UTC_DATE() - INTERVAL 10 DAY) AND % MONTH(FROM_UNIXTIME(t.dateline)) = MONTH(UTC_DATE() - INTERVAL 10 DAY) % GROUP BY % f.fid % HAVING % COUNT(*) > 0 % ORDER BY % f.order1, f.order2 [b][u]6. Monthly level-ups:[/u][/b] % SELECT % g.title, % COUNT(*) % FROM % usergroups g INNER JOIN promotionlogs p ON g.gid = p.newusergroup % WHERE % YEAR(FROM_UNIXTIME(p.dateline)) = YEAR(UTC_DATE() - INTERVAL 10 DAY) AND % MONTH(FROM_UNIXTIME(p.dateline)) = MONTH(UTC_DATE() - INTERVAL 10 DAY) % GROUP BY % g.gid % HAVING % COUNT(*) > 0 % ORDER BY % 1 [b][u]7. Last login times:[/u][/b] % SELECT % i.grp, % COUNT(*) % FROM % ( % SELECT % UNIX_TIMESTAMP(NOW()) - u.lastactive AS time % FROM % users u % ) la INNER JOIN ( % SELECT % 0 AS low, 86400 AS high, 'Today' AS grp % UNION ALL SELECT % 86400, 172800, '1 day ago' % UNION ALL SELECT % 172800, 259200, '2 days ago' % UNION ALL SELECT % 259200, 345600, '3 days ago' % UNION ALL SELECT % 345600, 604800, 'This week' % UNION ALL SELECT % 604800, 1209600, '1 week ago' % UNION ALL SELECT % 1209600, 1814400, '2 weeks ago' % UNION ALL SELECT % 1814400, UNIX_TIMESTAMP(NOW()) - UNIX_TIMESTAMP(NOW() - INTERVAL 1 MONTH), 'This month' % UNION ALL SELECT % UNIX_TIMESTAMP(NOW()) - UNIX_TIMESTAMP(NOW() - INTERVAL 1 MONTH), 2147483647, 'Before this month' % ) i ON la.time >= i.low AND la.time < i.high % GROUP BY % i.grp, i.low % HAVING % COUNT(*) > 0 % ORDER BY % i.low [b][u]8. Threads by post count:[/u][/b] % SELECT % IF ( % r.low = 0, % CONCAT(CAST(r.high AS CHAR), ' and below'), % IF ( % r.high = 2147483647, % CONCAT(CAST(r.low AS CHAR), ' and above'), % CONCAT(CAST(r.low AS CHAR), ' to ', CAST(r.high AS CHAR)) % ) % ), % COUNT(*) % FROM % ( % SELECT % t.replies + 1 AS replies % FROM % threads t % WHERE % t.visible = 1 AND % t.fid <> 8 % ) n INNER JOIN ( % SELECT % 0 AS low, 10 AS high % UNION ALL SELECT % 11, 20 % UNION ALL SELECT % 21, 40 % UNION ALL SELECT % 41, 60 % UNION ALL SELECT % 61, 100 % UNION ALL SELECT % 101, 200 % UNION ALL SELECT % 201, 500 % UNION ALL SELECT % 501, 2147483647 % ) r ON n.replies >= r.low AND n.replies <= r.high % GROUP BY % r.low, r.high % HAVING % COUNT(*) > 0 % ORDER BY % r.low [b][u]9. Blogs this month by comment count:[/u][/b] % SELECT % IF ( % r.low = 0, % CONCAT(CAST(r.high AS CHAR), ' and below'), % IF ( % r.high = 2147483647, % CONCAT(CAST(r.low AS CHAR), ' and above'), % CONCAT(CAST(r.low AS CHAR), ' to ', CAST(r.high AS CHAR)) % ) % ), % COUNT(*) % FROM % ( % SELECT % t.replies AS replies % FROM % threads t % WHERE % t.visible = 1 AND % t.fid = 8 AND % YEAR(FROM_UNIXTIME(t.dateline)) = YEAR(UTC_DATE() - INTERVAL 10 DAY) AND % MONTH(FROM_UNIXTIME(t.dateline)) = MONTH(UTC_DATE() - INTERVAL 10 DAY) % ) n INNER JOIN ( % SELECT % 0 AS low, 4 AS high % UNION ALL SELECT % 5, 9 % UNION ALL SELECT % 10, 19 % UNION ALL SELECT % 20, 29 % UNION ALL SELECT % 30, 39 % UNION ALL SELECT % 40, 59 % UNION ALL SELECT % 60, 99 % UNION ALL SELECT % 100, 199 % UNION ALL SELECT % 200, 499 % UNION ALL SELECT % 500, 2147483647 % ) r ON n.replies >= r.low AND n.replies <= r.high % GROUP BY % r.low, r.high % HAVING % COUNT(*) > 0 % ORDER BY % r.low [b][u]10. Total amount of buddy requests, across all users:[/u][/b] % SELECT % 'Accepted', % ( % SELECT % SUM(1 + LENGTH(buddylist) - LENGTH(REPLACE(buddylist, ',', ''))) % FROM % users % WHERE % buddylist != '' % ) % UNION ALL SELECT % 'Pending', % ( % SELECT % COUNT(*) % FROM % buddyrequests % ) [b][u]11. Amount of buddies per user:[/u][/b] % SELECT % IF( % tiers.low = tiers.high, % ELT(1 + tiers.high, 'None', 'One', 'Two', 'Three', 'Four', 'Five'), % CONCAT(CAST(tiers.low AS CHAR), IF(tiers.high = 2147483647, ' and above', CONCAT(' to ', CAST(tiers.high AS CHAR)))) % ), % COUNT(*) % FROM % ( % SELECT % IF( % buddylist = '', % 0, % 1 + LENGTH(buddylist) - LENGTH(REPLACE(buddylist, ',', '')) % ) AS amount % FROM % users % ) bc INNER JOIN ( % SELECT % 0 AS low, 0 AS high % UNION ALL SELECT % 1, 1 % UNION ALL SELECT % 2, 2 % UNION ALL SELECT % 3, 3 % UNION ALL SELECT % 4, 4 % UNION ALL SELECT % 5, 5 % UNION ALL SELECT % 6, 9 % UNION ALL SELECT % 10, 19 % UNION ALL SELECT % 20, 29 % UNION ALL SELECT % 30, 49 % UNION ALL SELECT % 50, 99 % UNION ALL SELECT % 100, 2147483647 % ) tiers ON bc.amount >= tiers.low AND bc.amount <= tiers.high % GROUP BY % tiers.low, tiers.high % HAVING % COUNT(*) > 0 % ORDER BY % tiers.high [b][u]12. Amount of ignored users per user:[/u][/b] % SELECT % IF( % tiers.low = tiers.high, % ELT(1 + tiers.high, 'None', 'One', 'Two', 'Three', 'Four', 'Five'), % CONCAT(CAST(tiers.low AS CHAR), IF(tiers.high = 2147483647, ' and above', CONCAT(' to ', CAST(tiers.high AS CHAR)))) % ), % COUNT(*) % FROM % ( % SELECT % IF( % ignorelist = '', % 0, % 1 + LENGTH(ignorelist) - LENGTH(REPLACE(ignorelist, ',', '')) % ) AS amount % FROM % users % ) bc INNER JOIN ( % SELECT % 0 AS low, 0 AS high % UNION ALL SELECT % 1, 1 % UNION ALL SELECT % 2, 2 % UNION ALL SELECT % 3, 3 % UNION ALL SELECT % 4, 4 % UNION ALL SELECT % 5, 5 % UNION ALL SELECT % 6, 9 % UNION ALL SELECT % 10, 19 % UNION ALL SELECT % 20, 29 % UNION ALL SELECT % 30, 49 % UNION ALL SELECT % 50, 99 % UNION ALL SELECT % 100, 2147483647 % ) tiers ON bc.amount >= tiers.low AND bc.amount <= tiers.high % GROUP BY % tiers.low, tiers.high % HAVING % COUNT(*) > 0 % ORDER BY % tiers.high [b][u]13. Username changes per user:[/u][/b] % SELECT % amount, % COUNT(*) % FROM % ( % SELECT % COALESCE( % ELT( % 1 + COUNT(h.dateline), % 'None', 'One', 'Two', 'Three', 'Four', 'Five' % ), % 'More than five' % ) AS amount, % COUNT(h.dateline) AS number % FROM % users u LEFT JOIN usernamehistory h ON u.uid = h.uid % GROUP BY % u.uid % ) a % GROUP BY % a.amount % HAVING % COUNT(*) > 0 % ORDER BY % a.number [b][u]14. Username changes, overall:[/u][/b] % SELECT % ELT( % kind, % 'From previous months', % 'Via User Control Panel, this month', % 'Administratively issued, this month' % ), % COUNT(*) % FROM % ( % SELECT % IF( % YEAR(FROM_UNIXTIME(dateline)) = YEAR(UTC_DATE() - INTERVAL 10 DAY) AND % MONTH(FROM_UNIXTIME(dateline)) = MONTH(UTC_DATE() - INTERVAL 10 DAY), % adminchange + 2, % 1 % ) AS kind % FROM % usernamehistory % ) h % GROUP BY % kind % HAVING % COUNT(*) > 0 % ORDER BY % kind [b][u]15. Attachments uploaded this month, by type:[/u][/b] % SELECT % IFNULL(name, 'Other'), % COUNT(*) % FROM % ( % SELECT % t.name AS name, % a.dateuploaded AS dateline % FROM % attachments a LEFT JOIN attachtypes t % ON LCASE(SUBSTRING_INDEX(a.filename, '.', -1)) = LCASE(t.extension) % ) fa % WHERE % YEAR(FROM_UNIXTIME(dateline)) = YEAR(UTC_DATE() - INTERVAL 10 DAY) AND % MONTH(FROM_UNIXTIME(dateline)) = MONTH(UTC_DATE() - INTERVAL 10 DAY) % GROUP BY % name % HAVING % COUNT(*) > 0 % ORDER BY % name IS NULL, name [b][u]16. Total attachment size (in kilobytes) uploaded this month, by type:[/u][/b] % SELECT % IFNULL(name, 'Other'), % IFNULL(ROUND(SUM(filesize) / 1024), 0) % FROM % ( % SELECT % t.name AS name, % a.dateuploaded AS dateline, % a.filesize AS filesize % FROM % attachments a LEFT JOIN attachtypes t % ON LCASE(SUBSTRING_INDEX(a.filename, '.', -1)) = LCASE(t.extension) % ) fa % WHERE % YEAR(FROM_UNIXTIME(dateline)) = YEAR(UTC_DATE() - INTERVAL 10 DAY) AND % MONTH(FROM_UNIXTIME(dateline)) = MONTH(UTC_DATE() - INTERVAL 10 DAY) % GROUP BY % name % HAVING % COUNT(*) > 0 % ORDER BY % name IS NULL, name [b][u]17. Date and time formats, by amount of users:[/u][/b] % SELECT % ELT( % c.kind + 1, % 'Default date and time formats', % 'Custom time format', % 'Custom date format', % 'Custom date and time formats' % ), % c.amount % FROM % ( % SELECT % 2 * (u.dateformat != '' AND u.dateformat != '0') + % (u.timeformat != '' AND u.timeformat != '0') AS kind, % COUNT(*) AS amount % FROM % users u % GROUP BY % 1 % ORDER BY % 1 % ) AS c % ORDER BY % c.kind [b][u]18. Referrals per user:[/u][/b] % SELECT % IF( % tiers.low = tiers.high, % ELT(1 + tiers.high, 'None', 'One', 'Two', 'Three', 'Four', 'Five'), % CONCAT(CAST(tiers.low AS CHAR), IF(tiers.high = 2147483647, ' and above', CONCAT(' to ', CAST(tiers.high AS CHAR)))) % ), % COUNT(*) % FROM % users u INNER JOIN ( % SELECT % 0 AS low, 0 AS high % UNION ALL SELECT % 1, 1 % UNION ALL SELECT % 2, 2 % UNION ALL SELECT % 3, 3 % UNION ALL SELECT % 4, 4 % UNION ALL SELECT % 5, 5 % UNION ALL SELECT % 6, 9 % UNION ALL SELECT % 10, 14 % UNION ALL SELECT % 15, 19 % UNION ALL SELECT % 20, 29 % UNION ALL SELECT % 30, 49 % UNION ALL SELECT % 50, 2147483647 % ) tiers ON u.referrals >= tiers.low AND u.referrals <= tiers.high % GROUP BY % tiers.low, tiers.high % HAVING % COUNT(*) > 0 % ORDER BY % tiers.high [b][u]19. Posts this month by time (UTC):[/u][/b] % SELECT % CONCAT(DATE_FORMAT(FROM_UNIXTIME(tiers.low), '%k:%i'), ' to ', DATE_FORMAT(FROM_UNIXTIME(tiers.high), '%k:%i')), % COUNT(*) % FROM % ( % SELECT % (pc.dateline % 86400) AS time % FROM % posts pc INNER JOIN threads t ON pc.tid = t.tid % WHERE % YEAR(FROM_UNIXTIME(pc.dateline)) = YEAR(UTC_DATE() - INTERVAL 10 DAY) AND % MONTH(FROM_UNIXTIME(pc.dateline)) = MONTH(UTC_DATE() - INTERVAL 10 DAY) AND % pc.visible = 1 AND % t.visible = 1 AND % t.fid <> 8 % ) p INNER JOIN ( % SELECT % 0 AS low, 5399 AS high % UNION ALL SELECT % 5400, 10799 % UNION ALL SELECT % 10800, 16199 % UNION ALL SELECT % 16200, 21599 % UNION ALL SELECT % 21600, 26999 % UNION ALL SELECT % 27000, 32399 % UNION ALL SELECT % 32400, 37799 % UNION ALL SELECT % 37800, 43199 % UNION ALL SELECT % 43200, 48599 % UNION ALL SELECT % 48600, 53999 % UNION ALL SELECT % 54000, 59399 % UNION ALL SELECT % 59400, 64799 % UNION ALL SELECT % 64800, 70199 % UNION ALL SELECT % 70200, 75599 % UNION ALL SELECT % 75600, 80999 % UNION ALL SELECT % 81000, 86399 % ) tiers ON p.time >= tiers.low AND p.time <= tiers.high % GROUP BY % tiers.low, tiers.high % HAVING % COUNT(*) > 0 % ORDER BY % tiers.low [b][u]20. Posts this month by day of week (UTC):[/u][/b] (this statistic adjusts for days that occur five times this month) % SELECT % CONCAT(dayname, IF(adjust, ' (adjusted -20%)', '')), % IF(adjust, (amount * 4 + 2) DIV 5, amount) % FROM % ( % SELECT % ELT(counts.dow, 'Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday') AS dayname, % counts.amount AS amount, % ld.dow IS NOT NULL AS adjust % FROM % ( % SELECT % (pp.dateline DIV 86400 + 4) MOD 7 + 1 AS dow, % COUNT(*) AS amount % FROM % posts pp INNER JOIN threads t ON pp.tid = t.tid % WHERE % YEAR(FROM_UNIXTIME(pp.dateline)) = YEAR(UTC_DATE() - INTERVAL 10 DAY) AND % MONTH(FROM_UNIXTIME(pp.dateline)) = MONTH(UTC_DATE() - INTERVAL 10 DAY) AND % pp.visible = 1 AND % t.visible = 1 AND % t.fid <> 8 % GROUP BY % dow % ) counts LEFT OUTER JOIN ( % SELECT % DAYOFWEEK(MAKEDATE(m.y, dn.d) + INTERVAL (m.m - 1) MONTH) AS dow % FROM % ( % SELECT % 29 AS d % UNION ALL SELECT % 30 % UNION ALL SELECT % 31 % ) dn, ( % SELECT % YEAR(UTC_DATE() - INTERVAL 10 DAY) AS y, % MONTH(UTC_DATE() - INTERVAL 10 DAY) As m % ) m % WHERE % dn.d <= DAY(LAST_DAY(MAKEDATE(m.y, 1) + INTERVAL (m.m - 1) MONTH)) % ) ld ON counts.dow = ld.dow % WHERE % counts.amount > 0 % ORDER BY % counts.dow = 1, counts.dow % ) totals [b][u]21. Users by online time:[/u][/b] % SELECT % IF(unit = 'never', 'No time', CONCAT( % IF(low = 0, 'Less than', low), % ' ', % IF(high = 2147483647, % CONCAT(unit, IF(low = 1, '', 's'), ' and above'), % CONCAT(IF(low = 0, '', 'to '), high, ' ', unit, IF(high = 1, '', 's')) % ) % )), % COUNT(*) % FROM % ( % SELECT % v.low AS low, % v.high AS high, % v.unit AS unit, % v.sort AS sort % FROM % ( % SELECT % CASE % WHEN timeonline < 86400 THEN % timeonline / 3600 % WHEN timeonline < 604800 THEN % timeonline / 86400 % ELSE % timeonline / 604800 % END AS amount, % CASE % WHEN timeonline <= 0 THEN % 'never' % WHEN timeonline < 86400 THEN % 'hour' % WHEN timeonline < 604800 THEN % 'day' % ELSE % 'week' % END AS unit % FROM % users % ) t INNER JOIN ( % SELECT % 0 AS low, 2147483647 AS high, 'never' AS unit, 0 AS sort % UNION ALL SELECT % 0, 1, 'hour', 1 % UNION ALL SELECT % 1, 3, 'hour', 1 % UNION ALL SELECT % 3, 6, 'hour', 1 % UNION ALL SELECT % 6, 12, 'hour', 1 % UNION ALL SELECT % 12, 24, 'hour', 1 % UNION ALL SELECT % 1, 2, 'day', 2 % UNION ALL SELECT % 2, 3, 'day', 2 % UNION ALL SELECT % 3, 5, 'day', 2 % UNION ALL SELECT % 5, 7, 'day', 2 % UNION ALL SELECT % 1, 2, 'week', 3 % UNION ALL SELECT % 2, 3, 'week', 3 % UNION ALL SELECT % 3, 5, 'week', 3 % UNION ALL SELECT % 5, 10, 'week', 3 % UNION ALL SELECT % 10, 2147483647, 'week', 3 % ) v ON t.unit = v.unit AND t.amount >= v.low AND t.amount < v.high % ) list % GROUP BY % sort, low, high, unit % HAVING % COUNT(*) > 0