【问题标题】:How to get and sort data from this MYSQL query如何从此 MYSQL 查询中获取和排序数据
【发布时间】:2016-11-13 01:47:55
【问题描述】:

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

我有以下表格

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 是标记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 的数量来排序我的输出?

【问题讨论】:

  • 请添加一些sql来创建表,插入一些虚拟数据,你期望的输出和你得到的输出。

标签: mysql database


【解决方案1】:

我如何按匹配数排序我的输出

您需要加入并使用 group by 来实现此目的。例如

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

您可以在这里计算行数,然后按该计算排序。

【讨论】:

  • 成功了!很高兴有人真正练习过 sql。
猜你喜欢
  • 1970-01-01
  • 2016-06-22
  • 1970-01-01
  • 2017-04-25
  • 1970-01-01
  • 2014-03-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多