Datenbankeinträge ordnen

PHP:
UPDATE 
            table, 
            (
                SELECT
                    @newCount := IF(@lastId = id, @newCount + 1, 1) AS newCount,
                    `count` AS oldCount, 
                    @lastId := id AS id
                FROM
                    (SELECT @newCount := 0, @lastId := 0) AS vars,
                    (SELECT * FROM table ORDER BY ID, `count`) AS myData
                ) AS newCounts
        SET 
            table.count = newCounts.newCount
        WHERE
            table.tID= '$id' AND
            table.id = newCounts.id AND
            table.count = newCounts.oldCount"
 
Hab mir jetzt eine Tabelle mit deinen Daten erstellt und das ganze getestet. Es funktioniert.
Code:
"tid";"id";"count"
"1";"35";"1"
"1";"36";"1"
"1";"35";"2"
"1";"36";"2"
 
Hast du den Query von oben verwendet? Weil bei mir gehts immer noch nicht.. Habe auch eine neue Tabelle zum testen erstellt - geht auch nicht :\
 
Mein Testfall:
SQL:
--Testtablle für Thread 366775 im Tutorials-Forum
CREATE TABLE `t366775` (
    `tid` VARCHAR(10) NOT NULL DEFAULT '' COLLATE 'latin1_general_ci',
    `id` INT(10) NULL DEFAULT NULL,
    `count` INT(10) NULL DEFAULT NULL
)
COLLATE='latin1_general_ci'
ENGINE=MyISAM
ROW_FORMAT=DEFAULT;

-- Testdaten
TRUNCATE TABLE T366775;
INSERT INTO `t366775` (`tid`, `id`, `count`) VALUES ('1', 35, 15);
INSERT INTO `t366775` (`tid`, `id`, `count`) VALUES ('1', 36, 16);
INSERT INTO `t366775` (`tid`, `id`, `count`) VALUES ('1', 35, 27);
INSERT INTO `t366775` (`tid`, `id`, `count`) VALUES ('1', 36, 28);

-- Update durchführen
UPDATE 
            t366775, 
            (
                SELECT
                    @newCount := IF(@lastId = id, @newCount + 1, 1) AS newCount,
                    `count` AS oldCount, 
                    @lastId := id AS id
                FROM
                    (SELECT @newCount := 0, @lastId := 0) AS vars,
                    (SELECT * FROM t366775 ORDER BY ID, `count`) AS myData
                ) AS newCounts
        SET 
            t366775.count = newCounts.newCount
        WHERE
            t366775.tID= '1' AND
            t366775.id = newCounts.id AND
            t366775.count = newCounts.oldCount ;

SELECT * FROM t366775;
 
Zuletzt bearbeitet von einem Moderator:
@Hirnhamster
naja, sagen wir ein User hat eine bestimmte ID, trägt dann etwas ein und jeder Eintrag wird gezählt.
Wird nun ein Eintrag gelöscht, sieht es dann so aus:

ID | count | .......
36 1
35 1
36 2
35 3
(ID 35, count 2 hier gelöscht)
damit es nicht so bleibt, wollte ich die Einträge neuzählen.

Dann versteh ich nicht warum die mehrmals die gleiche ID in der Datenbank hast, sollte da nicht nur eine drin sein deren count immer hochgezählt wird?
 
Habs glaub ich falsch beschrieben, ist nicht für einen User gedacht, sondern für mehrere :)
(ID 36 - User 2, ID 35 - User 1)

@yaslaw
Endlich hinbekommen, Danke!
 
Die Namen der Spalten haben mich verwirrt :D
Dein Query hatte ja nach ID geordnet, doch bei mir enthielt die Spalte ID verschiedene Werte.
Habe den Code dann einfach richtig angepasst und es lief :)

Hat mir sehr geholfen, danke nochmals
 
Zurück