Autor | Zpráva | ||
---|---|---|---|
H13 Profil |
#1 · Zasláno: 27. 7. 2012, 15:05:45
Ahoj, měl by někdo nápad nebo alespoň myšlenku, jak vyřešit následující pouze na úrovni MySQL.
Tabulka: id | id_rodice | id_rodice_byvala_hodnota | =========================================== 1 | 11 | 0 | 2 | 12 | 0 | 3 | 13 | 0 | 4 | 0 | 11 | 5 | 0 | 12 | 6 | 0 | 13 | U řádků, které mají hodnotu id_rodice větší než nulu, je potřeba tuto hodnotu změnit na nové id_rodice a klíč je id_rodice_byvala_hodnota. Tedy např. řádek číslo 1 má dostat hodnotu 4 (protože id_rodice(1) = 11 a id_rodice(4) a jeho id_rodice_byvala_hodnota = 11 Výsledek by měl být: id | id_rodice | id_rodice_byvala_hodnota | =========================================== 1 | 4 | 0 | 2 | 5 | 0 | 3 | 6 | 0 | 4 | 0 | 11 | 5 | 0 | 12 | 6 | 0 | 13 | Zkouším různé podmínky a pořád se nemůžu dopátrat výsledku, něco jako: UPDATE tabulka SET CASE WHEN id_rodice > 0 AND id_rodice_bavala_hodnota = 0 //to proto, aby se nově přepsané hodnoty nezačaly cyklovaně přepisovat THEN id_rodice = (SELECT id FROM tabulka WHERE ... // a tady sem v koncích, něco jako: id_rodice_byvala_hodnota = id_rodice) END; //??? Pokud někdo rozumí, co potřebuji udělat a měl by nějaký nápad, byl bych za něj rád. Děkuji |
||
Tori Profil |
Zkuste:
UPDATE tabulka t INNER JOIN tabulka ref ON t.id_rodice = ref.id_rodice_byvala_hodnota SET t.id_rodice = ref.id WHERE t.id_rodice > 0 Manuál praví: „Currently, you cannot update a table and select from the same table in a subquery.“, což jsem si vyložila jako "ale spojení tabulek provést můžete", snad správně. |
||
Kcko Profil |
#3 · Zasláno: 27. 7. 2012, 18:50:09
Tori:
Zkusil sem si to a na mě to nehulákalo MySQL 5.1.3.6 |
||
H13 Profil |
#4 · Zasláno: 28. 7. 2012, 15:17:39
Ahoj,
Tori: Děkuji moc, funguje to přesně, jak jsem potřeboval Kcko: Díky za test |
||
Časová prodleva: 11 let
|
0