2016-11-13 39 views
0

更新排序:問題更新,以幫助人們已瞭解更如何獲取和數據從這個MySQL查詢

我有如下表

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外鍵ofcourse到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

請添加一些sql來創建表格,插入一些虛擬數據,你期望的輸出和你得到的輸出。 –

回答

0

我如何通過比賽

你需要一個連接,並通過使用組來實現這一數量訂購我的輸出。例如

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 

這裏您可以計算行數,然後按該計算進行排序。

+0

工作!很高興在sql上真正的練習的人在這裏。 – unkn0wn

相關問題