Seřazení článků podle návštěvnosti za poslední týden
Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
- CZechBoY
- Člen | 3608
Zdravím,
potřeboval ybch vypsat všechny články, seřazené podle návštěvnosti za
poslední týden.
Takže mám databázi:
`content (content_id, další informace o článku)
week_stat(content_id (FK->content), last_visit, IP)`
Otázky teda zní: Jak toto zapsat v NDBT? Jde to vůbec bez použití
query?
Díky za rady.
edit: (Nečekaně) jsem na to po pár minutách po postnutí na forum přišel, ale nevím jestli to nejde nějak líp.
$this->db->table('content')
->select('content.*')
->select('(SELECT COUNT(content_id) FROM week_stat WHERE content_id = content.content_id AND last_visit > DATE_SUB(NOW(), INTERVAL 7 DAY)) AS weekStatCount')
->order('weekStatCount DESC');
Editoval CZechBoY (6. 9. 2014 2:36)
- japlavaren
- Člen | 404
skus
<?php
$this->db->table('content')
->select('content.*, COUNT(week_stat.content_id) AS weekStatCount')
->where('week_stat.last_visit > DATE_SUB(NOW(), INTERVAL 7 DAY)')
->group('week_stat.content_id')
->order('weekStatCount DESC');
?>
prip hod niekam dump db, nech to mozem skusit na real datach. kazdy problem ide nejak vyriesit
- CZechBoY
- Člen | 3608
CREATE TABLE `content` (
`content_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(50) COLLATE utf8_czech_ci NOT NULL,
`author_id` int(10) unsigned NOT NULL,
`slug` varchar(50) COLLATE utf8_czech_ci NOT NULL,
`description` text COLLATE utf8_czech_ci NOT NULL,
`src` tinytext COLLATE utf8_czech_ci NOT NULL,
`category_id` int(10) unsigned NOT NULL,
`approved` tinyint(3) unsigned NOT NULL DEFAULT '0',
`date_added` datetime NOT NULL ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`content_id`),
UNIQUE KEY `slug` (`slug`),
KEY `author_id` (`author_id`),
KEY `category_id` (`category_id`),
KEY `approved_date_added` (`approved`,`date_added`),
CONSTRAINT `content_ibfk_1` FOREIGN KEY (`author_id`) REFERENCES `user` (`user_id`),
CONSTRAINT `content_ibfk_2` FOREIGN KEY (`category_id`) REFERENCES `category` (`category_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_czech_ci;
CREATE TABLE `week_stat` (
`content_id` int(10) unsigned NOT NULL,
`last_visit` datetime NOT NULL,
`IP` varchar(45) COLLATE utf8_czech_ci NOT NULL,
PRIMARY KEY (`content_id`,`IP`),
CONSTRAINT `week_stat_ibfk_1` FOREIGN KEY (`content_id`) REFERENCES `content` (`content_id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_czech_ci;