COUNT fråga

PHPportalen Forum Index » Databaser
Lägg ett bokmärke på hela tråden
Skapa nytt inlägg   Svara på inlägget
Visa föregående ämne :: Visa nästa ämne  
Startad av: Meddelande
snylften



Medlem i: 3868 dagar

Status: Offline



#740859
Inlägg Skrivet: 2016-06-15 07:26      Ämne: COUNT fråga Citera

Jag har en databastabell med stats_input_keywords som lagrar vilka ord besökare söker på på min sökmotor.

Varje gån gången söker på ett ord eller fras så lagras det i DBn tillsammans med en timestamp.

Jag vil få ut en lista på de 100 mest sökta sökorden inom ett visst datumintervall. Resultatet ska se ut ungefär så här

Keyword | Num
---------------------
golf | 1091
skor | 1083
hotell | 998
nyheter | 531

Jag har försökt med detta men det ger mig bara ett ord.
SELECT
DISTINCT(keyword),
COUNT(keyword) AS num
FROM stats_input_keywords
ORDER BY timedate DESC
LIMIT 100

Här är en dump på tabellen
KOD:
1:
CREATE TABLE `stats_input_keywords` (
2:
  `keyword` varchar(100) COLLATE utf8_unicode_ci NOT NULL,
3:
  `timedate` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP
4:
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;


Och lite data

KOD:
1:
INSERT INTO `stats_input_keywords` (`keyword`, `timedate`) VALUES
2:
('golf', '2016-02-11 14:13:50'),
3:
('uddevalla', '2016-02-11 14:13:50'),
4:
('bmw', '2016-02-11 14:13:57'),
5:
('golf', '2016-02-11 14:14:05'),
6:
('uddevalla', '2016-02-11 14:14:05'),
7:
('golf', '2016-02-11 14:14:07'),
8:
('uddevalla', '2016-02-11 14:14:07'),
9:
('golf', '2016-02-11 14:14:09'),
10:
('uddevalla', '2016-02-11 14:14:09'),
11:
('golf', '2016-02-11 14:14:10'),
12:
('uddevalla', '2016-02-11 14:14:10'),
13:
('golf', '2016-02-11 14:14:12'),
14:
('uddevalla', '2016-02-11 14:14:12'),
15:
('golf', '2016-02-11 14:14:13'),
16:
('uddevalla', '2016-02-11 14:14:13'),
17:
('golf', '2016-02-11 14:14:14'),
18:
('uddevalla', '2016-02-11 14:14:14'),
19:
('golf', '2016-02-11 14:14:16'),
20:
('uddevalla', '2016-02-11 14:14:16'),
21:
('golf', '2016-02-11 14:14:17'),
22:
('uddevalla', '2016-02-11 14:14:17'),
23:
('bildekk', '2016-02-11 14:17:04'),
24:
('og', '2016-02-11 14:17:04'),
25:
('felger', '2016-02-11 14:17:04'),
26:
('bilforhandlere', '2016-02-11 14:17:10'),
27:
('maskiner', '2016-02-11 14:18:56'),
28:
('strømstad', '2016-02-11 14:20:13'),
29:
('ovner', '2016-02-11 14:22:29'),
30:
('og', '2016-02-11 14:22:29'),
31:
('peiser', '2016-02-11 14:22:29'),
32:
('buars', '2016-02-11 14:23:15'),
33:
('sko', '2016-02-11 14:25:50'),
34:
('brukt', '2016-02-11 15:02:05'),
35:
('dagligvarer', '2016-02-11 15:05:16'),
36:
('100', '2016-02-11 15:10:45'),
37:
('hoteller', '2016-02-11 15:11:06'),
38:
('og', '2016-02-11 15:11:06'),
39:
('andre', '2016-02-11 15:11:06'),
40:
('overnattingssteder', '2016-02-11 15:11:06'),
41:
('bensinstasjoner', '2016-02-11 15:12:04'),
42:
('jernvarer', '2016-02-11 15:12:25'),
43:
('lekia', '2016-02-11 15:17:54'),
44:
('husflid,', '2016-02-11 15:26:24'),
45:
('garn,', '2016-02-11 15:26:24'),
46:
('tekstiler', '2016-02-11 15:26:24'),
47:
('og', '2016-02-11 15:26:24'),
48:
('tilbehør', '2016-02-11 15:26:24'),
49:
('kroppspleie', '2016-02-11 15:31:28'),
50:
('taxi', '2016-02-11 15:33:02'),
51:
('severdigheter', '2016-02-11 15:35:39'),
52:
('tobakk', '2016-02-11 15:38:06'),
53:
('brukt', '2016-02-11 15:38:27'),
54:
('restauranter,', '2016-02-11 15:39:09'),
55:
('gatekjøkken', '2016-02-11 15:39:09'),
56:
('og', '2016-02-11 15:39:09'),
57:
('kafeer', '2016-02-11 15:39:09'),
58:
('audi', '2016-02-11 15:39:31'),
59:
('banker', '2016-02-11 15:40:43'),
60:
('svømmebasseng', '2016-02-11 15:41:15'),
61:
('og', '2016-02-11 15:41:15'),
62:
('boblebad', '2016-02-11 15:41:15'),
63:
('tobakk', '2016-02-11 15:42:49'),
64:
('bilpleie', '2016-02-11 15:43:31'),
65:
('glassmestere', '2016-02-11 15:44:13'),
66:
('glassmestere', '2016-02-11 15:44:23'),
67:
('banker', '2016-02-11 15:44:55'),
68:
('apotek', '2016-02-11 15:46:08'),
69:
('nissan', '2016-02-11 15:47:06'),
70:
('', '2016-02-11 15:47:06'),
71:
('nissan', '2016-02-11 15:47:11'),
72:
('', '2016-02-11 15:47:11'),
73:
('nissan', '2016-02-11 15:47:11'),
74:
('', '2016-02-11 15:47:11'),
75:
('helsekost', '2016-02-11 15:48:38'),
76:
('helsekost', '2016-02-11 15:52:36'),
77:
('strømstad', '2016-02-11 15:52:36'),
78:
('golf', '2016-02-11 15:53:49'),
79:
('museer', '2016-02-11 15:54:00'),
80:
('og', '2016-02-11 15:54:00'),
81:
('severdigheter', '2016-02-11 15:54:00'),
82:
('hobbyvarer', '2016-02-11 15:54:44'),
83:
('bensinstasjoner', '2016-02-11 15:56:05'),
84:
('motorsykler', '2016-02-11 15:58:32'),
85:
('og', '2016-02-11 15:58:32'),
86:
('mopeder', '2016-02-11 15:58:32'),
87:
('restauranter', '2016-02-11 16:00:17'),
88:
('glassmestere', '2016-02-11 16:03:57'),
89:
('og', '2016-02-11 16:07:37'),
90:
('fritidsutstyr', '2016-02-11 16:07:37'),
91:
('uddevalla', '2016-02-11 16:10:54'),
92:
('uddevalla', '2016-02-11 16:10:56'),
93:
('vitvaror', '2016-02-11 16:11:32'),
94:
('uddevalla', '2016-02-11 16:11:50'),
95:
('tvättmaskin', '2016-02-11 16:14:41'),
96:
('uddevalla', '2016-02-11 16:14:52'),
97:
('bilstereo', '2016-02-11 16:15:18'),
98:
('godterier', '2016-02-11 16:16:32'),
99:
('godterier', '2016-02-11 16:17:37'),
100:
('godterier', '2016-02-11 16:17:49'),
101:
('klær', '2016-02-11 16:18:47');


Någon som kan sitta på ett svar?
 
Till toppen på sidan
Visa användarprofil Skicka privat meddelande
harald_b
Moderator



Medlem i: 4075 dagar
Från: Tavesta
Status: Offline



#740860
Inlägget är accepterad som det rätta svaret Skrivet: 2016-06-15 10:27      Ämne: Citera

Lösningen heter nog "GROUP BY":
KOD:
1:
SELECT keyword, COUNT(*) AS num FROM stats_input_keywords GROUP BY keyword ORDER BY num DESC LIMIT 100

Sedan kan man komplettera med WHERE efter FROM stats_input_keywords ifall man vill filtrera på tid eller datum.

Vad gäller datum/tid så hade jag nog i det här fallet tyckt det vore bättre att använda ett numeriskt fält för tidpunkten, och lagra den som en UNIX_TIMESTAMP.
På så sätt kan man befria logiken i programmet från alla tidszon och sommartidomställningsproblem.
Tal är dessutom enklare att jämföra och räkna på än datum.
 

_________________
R.r - Ett fritt affärssystem
Till toppen på sidan
Visa användarprofil Skicka privat meddelande
themarioOv



Medlem i: 377 dagar

Status: Offline



#740915
Inlägg Skrivet: 2016-08-05 20:54      Ämne: Citera

harald_b skrev:
Lösningen heter nog "GROUP BY":
KOD:
1:
SELECT keyword, COUNT(*) AS num FROM stats_input_keywords GROUP BY keyword ORDER BY num DESC LIMIT 100

Sedan kan man komplettera med WHERE efter FROM stats_input_keywords ifall man vill filtrera på tid eller datum.

Vad gäller datum/tid så hade jag nog i det här fallet tyckt det vore bättre att använda ett numeriskt fält för tidpunkten, och lagra den som en UNIX_TIMESTAMP.
På så sätt kan man befria logiken i programmet från alla tidszoner och sommartidomställningsproblem.
Tal är dessutom enklare att jämföra och räkna på än datum.


Tack för hjälpen hoppas det funkade lika bra för trådskaparen som för mig!
 
Till toppen på sidan
Visa användarprofil Skicka privat meddelande Besök användarens hemsida
Visa tidigare inlägg:   
Skapa nytt inlägg   Svara på inlägget
PHPportalen Forum Index » Databaser
Hoppa till:  
Du kan inte skapa nya inlägg i det här forumet
Du kan inte svara på inlägg i det här forumet
Du kan inte ändra dina inlägg i det här forumet
Du kan inte ta bort dina inlägg i det här forumet
Du kan inte rösta i det här forumet
Du kan inte bifoga filer i detta forum
Du kan inte ladda ner filer från detta forum
Kontakta oss på adressen: info@phpportalen.net
Webbplatsen bygger i grunden på phpBB © 2001, 2002 phpBB Group

Modifieringar har senare gjorts i systemet av PHPportalen
Sid och logotypdesign skapad av Daren Jularic