J'ai une table mysql qui contient des statistiques sur les visiteurs du site. qui me donne p> et j'aimerais obtenir la suivante: < / p> Comment dois-je modifier la requête pour obtenir un tel résultat (avec une requête MySQL, sans créer des tables temporaires)?
Pour obtenir des visites par heure, j'utilise p>
Est-il possible d'obtenir un tel résultat avec une requête MySQL? P> p>
4 Réponses :
Créer une autre table avec une seule colonne,
SELECT hs.hour as HOUR, COUNT(ws.ID) AS HOUR_STAT FROM hours_list hs LEFT JOIN cms_webstat ws ON hs.hour = hour(ws.TIMESTAMP_X) GROUP BY hs.hour ORDER BY hs.hour DESC
Ceci est juste la partie «pourquoi ce n'est pas de retour». La réponse de Marcus couvre la partie "Comment faire".
Le SQL P>
SELECT hour(TIMESTAMP_X) as HOUR , count(*) AS HOUR_STAT FROM cms_webstat GROUP BY HOUR ORDER BY HOUR DESC
J'ai enfin trouvé la réponse. Peut-être que je suis fou, mais cela fonctionne.
SELECT HOUR, max(HOUR_STAT) as HOUR_STAT FROM ( ( SELECT HOUR(TIMESTAMP_X) as HOUR, count(*) as HOUR_STAT FROM cms_webstat WHERE date(TIMESTAMP_X) = date(now()) ) UNION (SELECT 0 as HOUR, 0) UNION (SELECT 1 as HOUR, 0) UNION (SELECT 2 as HOUR, 0) UNION (SELECT 3 as HOUR, 0) UNION (SELECT 4 as HOUR, 0) UNION (SELECT 5 as HOUR, 0) UNION (SELECT 6 as HOUR, 0) UNION (SELECT 7 as HOUR, 0) UNION (SELECT 8 as HOUR, 0) UNION (SELECT 9 as HOUR, 0) UNION (SELECT 10 as HOUR, 0) UNION (SELECT 11 as HOUR, 0) UNION (SELECT 12 as HOUR, 0) UNION (SELECT 13 as HOUR, 0) UNION (SELECT 14 as HOUR, 0) UNION (SELECT 15 as HOUR, 0) UNION (SELECT 16 as HOUR, 0) UNION (SELECT 17 as HOUR, 0) UNION (SELECT 18 as HOUR, 0) UNION (SELECT 19 as HOUR, 0) UNION (SELECT 20 as HOUR, 0) UNION (SELECT 21 as HOUR, 0) UNION (SELECT 22 as HOUR, 0) UNION (SELECT 23 as HOUR, 0) ) AS `combined_table` GROUP BY HOUR ORDER BY HOUR DESC
$sql = 'SELECT g, MAX(v) AS v, MAX(c) AS c FROM ('; $sql .= '(SELECT DATE_FORMAT(viewed, \'%d.%m.%Y\') AS g, COUNT(1) AS v, 0 AS c FROM '.$this->prefix.'view WHERE campaignid IN ('.join(', ',$ids).') GROUP BY g)'; $sql .= ' UNION (SELECT DATE_FORMAT(clicked, \'%d.%m.%Y\') AS g, 0 AS v, COUNT(1) AS c FROM '.$this->prefix.'clicks WHERE campaignid IN ('.join(', ',$ids).') GROUP BY g)'; $today = strtotime("00:00:00"); for ($i=$today; $i>=time()-30*86400; $i-=86400) { $sql .= ' UNION (SELECT \''.date('d.m.Y',$i).'\' AS g, 0 AS v, 0 AS c)'; } $sql .= ') AS tmp GROUP BY g ORDER BY g DESC'; $chart = DB::getAll($sql); p($chart); Thanks! Made it! From 2 tables, clicks and views, joined.. works. ajaxel.com
Sallake, pensez-vous que vous accepterez une réponse?
Marcus, votre solution fonctionne mais pas dans la façon dont je veux que ce soit. Je suis intéressé par une solution avec une requête SQL et sans créer et remplir d'autres tables.