作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
例如,我正在尝试获取标签名称为“test”的所有线程以及所有其他标签。如果我在我的 INNER JOIN 选择中添加一个 where 子句,那么它会获取带有该标记的线程,但它不会获取该线程的剩余标记(每个标记都是一个单独的行,我使用 group concat 将它们组合起来)。我怎样才能得到剩余的标签?
我有以下SQL
SELECT `threads`.`id`,
`threads`.`title` AS `title`,
`threads`.`created_at` AS `created_at`,
`threads`.`views` AS `views`,
`threads`.`comments` AS `comments`,
`threads`.`user_id` AS `user_id`,
`tags`
FROM `threads`
INNER JOIN
(SELECT threads_id,
GROUP_CONCAT(DISTINCT `thread_tags`.`thread_tags_title`) AS tags
FROM `thread_tags`
WHERE `thread_tags`.`thread_tags_title` = 'test'
GROUP BY threads_id) thread_tags ON `threads`.`id` = `thread_tags`.`threads_id`
WHERE `threads`.`status` = '1'
ORDER BY `threads`.`views` DESC, `threads`.`created_at` DESC LIMIT 25
OFFSET 0
以及以下方案
标签
CREATE TABLE `tags` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`title` varchar(200) NOT NULL,
`status` int(11) NOT NULL,
`created_at` datetime NOT NULL,
`updated_at` datetime NOT NULL,
`description` varchar(255) DEFAULT NULL,
`doctors` int(11) DEFAULT NULL,
`threads` int(11) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=latin1;
线程标签(包含线程 ID 和标签 ID 的表)
CREATE TABLE `thread_tags` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`threads_id` int(11) NOT NULL,
`tag_id` int(11) NOT NULL,
`thread_tags_title` varchar(255) NOT NULL DEFAULT '',
`created_at` datetime NOT NULL,
`updated_at` datetime NOT NULL,
`description` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=latin1;
线程
CREATE TABLE `threads` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`user_id` int(11) NOT NULL,
`title` varchar(200) NOT NULL,
`body` text NOT NULL,
`status` int(11) NOT NULL,
`views` int(11) NOT NULL,
`rating` int(11) NOT NULL,
`comments` int(11) NOT NULL,
`created_at` datetime NOT NULL,
`updated_at` datetime NOT NULL,
`metadata` text,
PRIMARY KEY (`id`),
KEY `title` (`title`)
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=latin1;
最佳答案
有点像
SELECT threads.*, GROUP_CONCAT(tags.title)
FROM threads AS t
LEFT JOIN thread_tags AS tt ON t.id = tt.threads_id
LEFT JOIN tags AS tt ON tt.tag_id = tags.id
WHERE t.id IN (
SELECT tt.threads_id
FROM thread_tags AS tt
JOIN tags ON tt.tag_id = tags.id
AND tags.title = "test"
)
GROUP BY t.id
关于php - 选择所有带标签的线程和其余标签?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12548188/
我是一名优秀的程序员,十分优秀!