2016-07-13 8 views
0

Komplett bearbeitet: Meine Abfrage hat 2 Spalten aus 2 Tabellen: Dateiname und Sortierreihenfolge.MySQL: Update einer "Sortier" -Spalte nach ORDER BY

SELECT * FROM table1 t1 
    LEFT JOIN table2 t2 
    ON t1.idmd5 = t2.imgid 
ORDER BY t2.filename 
WHERE t1.anotherid = "123456"; 

Ausgabe::

Die vollständigen Tabellen sind hier http://sqlfiddle.com/#!9/8c0507

Beispiel getan

filename-01.jpg - 12 
filename-02.jpg - 73 
filename-03.jpg - 1 
filename-12.jpg - 63 
filename-24.jpg - 99 

Jetzt sollte die "sortorder" Spalte nach der Reihenfolge neu eingestellt werden BY - Ausgang, sollte es bei 1 beginnen.

Erwartetes Ergebnis:

filename-01.jpg - 1 
filename-02.jpg - 2 
filename-03.jpg - 3 
filename-12.jpg - 4 
filename-24.jpg - 5 

Wie erreicht man das?

+0

Wollen Sie einen 'UPDATE' Betrieb ? Oder 'SELECT' Abfrage? – 1000111

+0

Als UPDATE denke ich. Der Inhalt im sortorder sollte geändert/nachgezählt werden – Sushimaster

Antwort

1

Hier ist die Abfrage:

  • eine Zeilennummer zu jedem Dateinamen zuweisen, nachdem in ASCENDING ORDER Sortierung.
  • später eine INNER JOIN zwischen der Tabelle alias t und Ihre Tabelle machen YT auf Dateinamen passend und die t.rn (row number/new sort order) um die YT.sortOrder Spalte Einstellung.

UPDATE 
your_table YT 
INNER JOIN 
(
    SELECT 
     fileName, 
     @rowNumber := @rowNumber + 1 AS rn 
    FROM your_table , (SELECT @rowNumber := 0) var 
    ORDER BY fileName ASC 
) AS t 
ON YT.fileName = t.fileName 
SET YT.sortOrder = t.rn; 

DemoBefore update


Probleme der SQL FIDDLE SCHEMA

TEST zuzugreifen (mit Daten):

012.
DROP TABLE IF EXISTS `your_table`; 
CREATE TABLE `your_table` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `filename` varchar(50) NOT NULL, 
    `sortOrder` int(11) NOT NULL, 
    PRIMARY KEY (`id`) 
); 
INSERT INTO `your_table` VALUES ('1', 'f1', '12'); 
INSERT INTO `your_table` VALUES ('2', 'f2', '73'); 
INSERT INTO `your_table` VALUES ('3', 'f3', '1'); 
INSERT INTO `your_table` VALUES ('4', 'f4', '63'); 
INSERT INTO `your_table` VALUES ('5', 'f5', '99'); 

SELECT 
* 
FROM your_table; 

id filename sortOrder 
1  f1   12 
2  f2   73 
3  f3   1 
4  f4   63 
5  f5   99 

**Now Run the above query** 



SELECT 
* 
FROM your_table; 

Endausgabe:

id filename sortOrder 
1  f1   1 
2  f2   2 
3  f3   3 
4  f4   4 
5  f5   5 

EDIT: (Auf der Grundlage der Änderungen in der Anforderung)

UPDATE 
tableone TOne 
INNER JOIN 
(
    SELECT 
     t1.file_id, 
     t2.IMG_FILENAME, 
     @rowNumber := @rowNumber + 1 AS rn 
    FROM 
    tableone t1 
    LEFT JOIN tabletwo t2 ON t1.FILE_ID = t2.IMG_ID 
    CROSS JOIN (SELECT @rowNumber := 0) AS var 
    ORDER BY t2.IMG_FILENAME ASC 
) AS t 
ON TOne.file_id = t.file_id 
SET TOne.Order = t.rn; 

Testdaten und Schema:

DROP TABLE IF EXISTS `tableone`; 
CREATE TABLE `tableone` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `order` int(11) NOT NULL, 
    `file_id` int(11) NOT NULL, 
    PRIMARY KEY (`id`) 
); 
INSERT INTO `tableone` VALUES ('1', '12', '1'); 
INSERT INTO `tableone` VALUES ('2', '73', '2'); 
INSERT INTO `tableone` VALUES ('3', '1', '3'); 
INSERT INTO `tableone` VALUES ('4', '63', '4'); 
INSERT INTO `tableone` VALUES ('5', '99', '5'); 


DROP TABLE IF EXISTS `tabletwo`; 
CREATE TABLE `tabletwo` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `img_id` int(11) NOT NULL, 
    `img_filename` varchar(50) NOT NULL, 
    PRIMARY KEY (`id`) 
); 

INSERT INTO `tabletwo` VALUES ('1', '1', 'filename-01.jpg '); 
INSERT INTO `tabletwo` VALUES ('2', '2', 'filename-02.jpg '); 
INSERT INTO `tabletwo` VALUES ('3', '3', 'filename-03.jpg '); 
INSERT INTO `tabletwo` VALUES ('4', '4', 'filename-04.jpg '); 
INSERT INTO `tabletwo` VALUES ('5', '5', 'filename-05.jpg '); 

Führen Sie die oben (UPDATE) Abfragevorgang und das Ergebnis

VOR AKTUALISIERUNG: SQL FIDDLE DEMO

NACH AKTUALISIERUNG: SQL FIDDLE DEMO

+0

Die Frage war zu abstrahiert, mein Fehler. Dateiname und sortorder aus 2 Tische kommen, so dass die "echte" Anweisung lautet: SELECT t1.ORDER, t2.IMG_FILENAME VON tableone t1 LEFT JOIN tabletwo t2 ON t1.FILE_ID = t2.IMG_ID Wie handhaben Das? Sorry dafür ... – Sushimaster

+0

Es ist wirklich frustrierend, dass du es beim ersten Mal nicht erzählt hast. Würden Sie bitte Ihre Frage jetzt auf Ihre neue Anforderung aktualisieren? – 1000111

+0

Also würde das Update in 'tableOne' stattfinden? Teilen Sie besser den 'Tabellenstrukturcode' dieser beiden Tabellen. – 1000111