2016-11-13 1 views
0

UPDATE 데이터를 정렬하는 방법 : 당연히 id에 태그를 사람들이 tidpid 외국 열쇠 더 나은얻을이 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); 

을 알아 보았 수 있도록 업데이트 질문 및 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