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
Wollen Sie einen 'UPDATE' Betrieb ? Oder 'SELECT' Abfrage? – 1000111
Als UPDATE denke ich. Der Inhalt im sortorder sollte geändert/nachgezählt werden – Sushimaster