2017-02-14 3 views
0

Ich habe eine Tabelle, deren Zeilen item_id und tag_id sind. Jede item_id ist eine einzigartige automatische Implementierung. Gegenstand kann mehrere tag_id haben.Kann MySQL ORDER BY FIELD einen zweiten Parameter von der inneren Join-Tabelle erhalten?

Ich versuche, Daten so sortiert zu bekommen. Wenn Benutzer die Seite besuchen, fange ich item_id, gehe zur Tabelle, bekomme alle tag_ids nach item_id und versuche andere item_ids zurückzugeben, die dieselbe tag_id haben.

Hier ist das Problem, wenn es items_id gibt es zufällig ist, zuerst muss ich Elemente von ersten Tag und dann andere. Hier ist die SQL-Abfrage.

SELECT DISTINCT `item_id`, `rel`.`tag_id` 
    FROM `itv_content_tags_rel` AS `rel` 
    INNER JOIN (SELECT `tag_id` 
       FROM `itv_content_tags_rel` 
       WHERE `item_id` = 65736 
       ) 
    AS kk ON kk.`tag_id` = `rel`.`tag_id` 
    ORDER BY FIELD(`rel`.`tag_id`, 'rel.tag_id') 

Die ORDER BY FIELD Zeile nicht funktioniert, [Ihr i-Tabelle mit whis Abfrage bekam.] [1]

Wenn ich
ORDER BY FIELD( rel . tag_id , 'rel.tag_id')
von

ORDER BY FIELD(`rel`.`tag_id`, '3788') DESC 
ändern

alles funktioniert perfekt [Ich habe Tabelle sortiert] [2]

Gibt es hier eine Lösung?

Edit:

Hier ist die Tabelle i nach Tims bearbeiten bekam. Tim's query Ist es möglich, mit item_id auch so sortiert zu bekommen. First sorted with tag_id then time_id

+0

Was ist Ihre gewünschte Ausgabe? –

Antwort

1

Der Grund Hinzufügen FIELD das Problem behoben zu haben scheint, ist, dass es die 3788 ID legt zunächst alles gefolgt, andere, die zufällig gerade geschieht, eine andere ID. Wenn Sie auf der tag_id Spalte numerisch sortieren möchten, dann können Sie nur ORDER BY verwenden und werfen diese Spalte etwas numerischen:

SELECT DISTINCT item_id, rel.tag_id 
FROM itv_content_tags_rel AS rel 
INNER JOIN 
(
    SELECT tag_id 
    FROM itv_content_tags_rel 
    WHERE item_id = 65736 
) AS kk 
    ON kk.tag_id = rel.tag_id 
ORDER BY CAST(rel.tag_id AS UNSIGNED) 

Beachten Sie, dass, wenn Sie für die tag_id nur immer enthalten Zahlen planen, sollten Sie vielleicht die Schalt Geben Sie für diese Spalte einen numerischen Typ an, damit Sie derartige Umsetzungen in Ihren Abfragen vermeiden können.

Update: Wenn Sie auch die item_id dann fügen Sie einfach eine andere Ebene zu dem ORDER BY, das heißt, so etwas sortieren verwenden wollen:

ORDER BY CAST(rel.tag_id AS UNSIGNED), 
     CAST(rel.item_id AS UNSIGNED) 
+0

Danke, es funktioniert perfekt :) –

+0

Ich habe diesen Teil in ganze Abfrage eingefügt und funktioniert gut, danke nochmal, aber ich habe ein Problem, es bestellt von tag_id gut, aber nicht mit item_id, ist es möglich, short tag_id + item_ id, Ich meine, wenn tag_ids gleich item_ids sollte ASC oder DESC sein. –

+0

Antwort aktualisiert, fügen Sie einfach eine weitere Bedingung zum 'ORDER BY' hinzu. –

Verwandte Themen