如何从此MYSQL查询中获取和排序数据

时间:2016-11-13 01:47:55

标签: mysql database

更新:更新问题以帮助人们更好地解决

我有以下表格

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);

其中tidpid是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来订购我的输出?

1 个答案:

答案 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

在这里你可以计算行数,然后按计算顺序。