2016-11-13 5 views
0

UPDATE zu sortieren: Ihre Frage aktualisiert Menschen Anfahrt und Daten aus dieser MYSQL Abfrage

Ich habe folgenden Tabellen besser

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

Wo tid und pid sind ofcourse Fremdschlüssel undestand helfen id TAG und POST id

Jetzt was ich will, ist verwandte Post basierend auf Tags von jedem Beitrag. Zum Beispiel, wenn einige POST1 enthält Tag T1, T2, T3, T4 und POST2 enthält Tag T2, T3, T4 und POST3 enthält T1, T2 und ich suche Posts auf POST1, dann meine Ausgabe sollte,

POST2 sein POST3

Beachten Sie die Reihenfolge, in der sie sich befinden, da die Anzahl der Tags in ihnen übereinstimmt. Zur Zeit bin ich daran fest, alle Posts mit gleichen Tags ohne Reihenfolge zu finden und meine Abfrage nimmt Tags als Eingabe, die POST-ID sein sollte.

Nun, wie ordne ich meine Ausgabe nach Anzahl der Übereinstimmungen T.Tagname in der zweiten Abfrage gefunden?

+0

Bitte fügen Sie einige SQL hinzu, um Tabellen zu erstellen, fügen Sie einige Dummy-Daten, die Ausgabe, die Sie erwarten, und die Ausgabe, die Sie erhalten. –

Antwort

0

Wie bestelle ich meine Ausgabe nach Anzahl der Spiele

Sie benötigen eine Verknüpfung und Nutzung der Gruppe um dies zu erreichen. ZB

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 

Hier können Sie die Zeilen zählen und dann nach dieser Berechnung sortieren.

+0

Das hat funktioniert! Froh, dass jemand mit echten Praxis auf Sql hier war. – unkn0wn

Verwandte Themen