Codeigniter; Active Records Class
从那个主题开始,我问了一个关于CodeIgniter的问题,我现在想到的是完全原始的。
这是我目å‰çš„查询。
SELECT `forums`.*,
Count(topics.id) threads,
Count(replies.id) replies,
`users`.`url` user_url,
`users`.`name` user_name,
`ranks`.`name` user_rank
FROM (`forums`)
LEFT JOIN `topics` ON `topics`.`f_id` = `forums`.`id`
LEFT JOIN `replies` ON `replies`.`t_id` = `topics`.`id`
LEFT JOIN `users` ON `users`.`id` = `topics`.`a_id`
LEFT JOIN `ranks` ON `users`.`status` = `ranks`.`id`
LEFT JOIN (
SELECT `topics`.`url` topic_url, `topics`.`name` topic_name
FROM `topics`
ORDER BY `created` DESC
LIMIT 1
) last_post ON `topics`.`f_id` = `forums`.`id`
GROUP BY `forums`.`id`
所以我è¦åšçš„就是把所有东西放在一个漂亮的行ä¸ã€‚ “Last Post Byâ€æ—边的所有内容都æ£å¸¸å·¥ä½œï¼Œå¦‚æžœæˆ‘åˆ é™¤åŽé¢çš„LEFT JOIN
æˆ‘æ·»åŠ äº†ç¬¬ä¸€ä¸ªï¼Œè€Œä¸æ˜¯æœ€åŽä¸€ä¸ªå¸–å。
所以我的问题是;我现在åšé”™äº†ä»€ä¹ˆï¼Ÿ
å¦å¤–,一个é¢å¤–的问题,我早些时候和一ä½æœ‹å‹è°ˆè¿‡ï¼Œå½“涉åŠåˆ°PHPå’ŒMySQL时,他比我更了解,他告诉我åªéœ€å°†å®ƒå˜å‚¨åœ¨æ•°æ®åº“ä¸ï¼Œlast_post以åŠè®¡æ•°çº¿ç¨‹å’Œå›žå¤ã€‚
æå‰è‡´è°¢ã€‚
这是论å›è¡¨
CREATE TABLE IF NOT EXISTS `forums` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`c_id` int(11) NOT NULL,
`url` varchar(255) NOT NULL,
`name` varchar(255) NOT NULL,
`desc` text NOT NULL,
PRIMARY KEY (`id`),
KEY `url` (`url`,`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=9 ;
这是主题表
CREATE TABLE IF NOT EXISTS `topics` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`f_id` int(11) NOT NULL,
`url` varchar(255) NOT NULL,
`name` varchar(255) NOT NULL,
`desc` varchar(255) NOT NULL,
`body` text NOT NULL,
`a_id` int(11) NOT NULL,
`created` int(11) NOT NULL,
`edited` int(11) NOT NULL,
PRIMARY KEY (`id`),
KEY `head` (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=10 ;
我还å°è¯•æ›´æ–°å®ƒä¸Žé™ä»·ç¼–辑的显示方å¼ï¼Œæ£å¦‚我第一次åšçš„é‚£æ ·ï¼Œæˆ‘å¸Œæœ›è¿™æ›´å…·å¸å¼•åŠ›ã€‚
ç”案 0 :(得分:2)
这是一个解决方案。我ä¸è®¤ä¸ºè¿™æ˜¯æœ€æœ‰æ•ˆçš„解决方案,但它应该有效。请注æ„,我将Topics
SELECT移动到第一个SELECT行。
SELECT `forums`.*,
Count(topics.id) threads,
Count(replies.id) replies,
`users`.`url` user_url,
`users`.`name` user_name,
`ranks`.`name` user_rank,
(SELECT `topics`.`url`
FROM `topics`
WHERE `topics`.`f_id` = `forums`.`id`
ORDER BY `created` DESC LIMIT 1) topic_url,
(SELECT `topics`.`name`
FROM `topics`
WHERE `topics`.`f_id` = `forums`.`id`
ORDER BY `created` DESC LIMIT 1) topic_name
FROM (`forums`)
LEFT JOIN `topics` ON `topics`.`f_id` = `forums`.`id`
LEFT JOIN `replies` ON `replies`.`t_id` = `topics`.`id`
LEFT JOIN `users` ON `users`.`id` = `topics`.`a_id`
LEFT JOIN `ranks` ON `users`.`status` = `ranks`.`id`
GROUP BY `forums`.`id`
å¯èƒ½æ›´æœ‰æ•ˆçš„æ–¹å¼
我没有数æ®æ¥æµ‹è¯•è¿™æ˜¯å¦æ›´å¿«ï¼Œä½†è¿™æ˜¯å¦ä¸€ç§æ–¹å¼ï¼ˆæˆ‘基于ROW_NUMBER() in MySQL。)这附带一个å—符串,å³{{{ 1}}è¡¨æ ¼ä¸èƒ½åŒ…å«é‡å¤çš„topics
,f_id
组åˆï¼š
created
å°è¯•ä¸€ä¸‹ï¼Œé¦–先查看它是å¦æœ‰æ•ˆï¼Œç„¶åŽæŸ¥çœ‹å®ƒæ˜¯å¦æ›´å¿«ã€‚我很想å¬åˆ°ä½ 的消æ¯ã€‚