更新:更新问题以帮助人们更好地解决
我有以下表格
CREATE TABLE IF NOT EXISTS `post` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`heading` TEXT NOT NULL,
`content` LONGTEXT NOT NULL,
`date` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
`thumb` TEXT NULL,
PRIMARY KEY (`id`))
ENGINE = InnoDB
AUTO_INCREMENT = 15
DEFAULT CHARACTER SET = latin1;
CREATE TABLE IF NOT EXISTS `tags` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`tagname` TEXT NOT NULL,
PRIMARY KEY (`id`))
ENGINE = InnoDB
AUTO_INCREMENT = 12
DEFAULT CHARACTER SET = latin1;
DROP TABLE IF EXISTS `tagsinpost` ;
CREATE TABLE IF NOT EXISTS `tagsinpost` (
`tid` INT(11) NULL DEFAULT NULL,
`pid` INT(11) NULL DEFAULT NULL,
CONSTRAINT `post_ibfk_1`
FOREIGN KEY (`pid`)
REFERENCES `post` (`id`)
ON DELETE CASCADE
ON UPDATE CASCADE,
CONSTRAINT `tagsinpost_ibfk_1`
FOREIGN KEY (`tid`)
REFERENCES `tags` (`id`)
ON DELETE CASCADE
ON UPDATE CASCADE)
ENGINE = InnoDB
DEFAULT CHARACTER SET = latin1;
CREATE INDEX `tagsinpost_ibfk_1` ON `tagsinpost` (`tid` ASC);
CREATE INDEX `post_ibfk_1` ON ``tagsinpost` (`pid` ASC);
其中tid
和pid
是TAG id
和POST id
现在我想要的是根据任何帖子的标签获得相关帖子。 例如,如果某些POST1包含标签T1,T2,T3,T4和POST2包含标签T2,T3,T4和POST3包含T1,T2,我正在搜索与POST1相关的帖子,那么我的输出应该是,
POST2 POST3
请注意它们所处的顺序,因为它们中匹配的标签数量。目前我发现所有帖子都没有订单而且找不到具有相同标签的帖子,我的查询将标签作为输入,应该是POST id。
select distinct P.id, P.heading, P.date
from post as P, tags as T, tagsinpost as TP
where TP.tid=T.id
and TP.pid=P.id
and T.tagname in (
select distinct T.tagname from tags as T, tagsinpost
as TP where TP.pid = 20 and TP.tid = T.id
)
现在我如何根据第二个查询中找到的匹配数T.tagname来订购我的输出?
答案 0 :(得分:0)
如何按比赛次数订购我的输出
您需要加入并使用group by来实现此目的。 E.g
Select t1.col1, count(*) as count_of
From table1 t1
Left join table2 t2 on t1.id = t2.fk
Group by t1.col1
Order by count_of DESC
在这里你可以计算行数,然后按计算顺序。