konto usunięte

Temat: UPDATE na jednym, konkretnym wierszu.

Witam

Mam taki problem, sytuacja:

Istnieje sobie tabela, w której na żadnej kolumnie nie ma ani PRIMARY KEY ani UNIQUE.

tabela: test
ID LICZBA TEKST
1 0 ab1
1 0 ab1
1 243 ab2
2 132 ab3
3 346 ab4
4 457 ab5

Problem polega na tym, że chciałbym zUPDATEować jeden konkretny wiersz, jedno konkretne pole w tym wierszu.
Załóżmy wiersz 2 pole 3 zmienić 'ab1' na 'XXX'. Jako, że nie mamy klucza to nie możemy użyć WHERE.

UPDATE `test` SET `tekst` = 'XXX' LIMIT 1,2 <- oczywiście nie działa, ale czy macie jakiś sposób na wykonanie takiej czynności?
Chodzi o update wykonany tylko na jednym wierszu począwszy od drugiego wiersza.

Pozdr

konto usunięte

Temat: UPDATE na jednym, konkretnym wierszu.

użyć czegoś co ponumeruje nam rekordy np. jakaś konstrukcja ala RANK_OVER w MySQlPrzemysław R. edytował(a) ten post dnia 01.10.10 o godzinie 11:54

konto usunięte

Temat: UPDATE na jednym, konkretnym wierszu.

Tomasz Fidos:
Witam

Mam taki problem, sytuacja:

Istnieje sobie tabela, w której na żadnej kolumnie nie ma ani PRIMARY KEY ani UNIQUE.

tabela: test
ID LICZBA TEKST
1 0 ab1
1 0 ab1
1 243 ab2
2 132 ab3
3 346 ab4
4 457 ab5

Problem polega na tym, że chciałbym zUPDATEować jeden konkretny wiersz, jedno konkretne pole w tym wierszu.
Załóżmy wiersz 2 pole 3 zmienić 'ab1' na 'XXX'. Jako, że nie mamy klucza to nie możemy użyć WHERE.

UPDATE `test` SET `tekst` = 'XXX' LIMIT 1,2 <- oczywiście nie
> działa, ale czy macie jakiś sposób na wykonanie takiej
czynności?
Chodzi o update wykonany tylko na jednym wierszu począwszy od drugiego wiersza.

Pozdr


sprobuj to osiagnac, laczac sie z baza za pomoca klienta sql, np heidi sql.
Robisz open table, najezdzasz na myszke i zmieniasz wartosc,potem enter i po sprawie.
Marcin Huta

Marcin Huta IT Developer,
Performance Testing,
Administrator
systemów IT

Temat: UPDATE na jednym, konkretnym wierszu.

Moze warto pomyslec o ID_AUTO --> autoinkrementacja.
Michał Jarosz

Michał Jarosz Frontend Developer &
Team Leader

Temat: UPDATE na jednym, konkretnym wierszu.


UPDATE `test` SET `tekst` = 'XXX' WHERE ID = 1 AND liczba = 0 AND tekst = 'ab1' LIMIT 1


??
Adam Bąk

Adam Bąk Programista

Temat: UPDATE na jednym, konkretnym wierszu.

Marcin Huta:
Moze warto pomyslec o ID_AUTO --> autoinkrementacja.


Tez bym tak zrobił :)

konto usunięte

Temat: UPDATE na jednym, konkretnym wierszu.

Adam Bąk:
Marcin Huta:
Moze warto pomyslec o ID_AUTO --> autoinkrementacja.


Tez bym tak zrobił :)

Ja też ;) ale zakładam, że nie ma kolumny z auto_increment w tabeli :(
Michał Jarosz:

UPDATE `test` SET `tekst` = 'XXX' WHERE ID = 1 AND liczba = 0 AND tekst = 'ab1' LIMIT 1


??
to zmieni pierwszy wiersz w tabeli ( jest taki sam jak drugi ) a chodzi właśnie o to żeby zmienić drugi wiersz ;)
Michał Jarosz

Michał Jarosz Frontend Developer &
Team Leader

Temat: UPDATE na jednym, konkretnym wierszu.

Tomasz Fidos:

to zmieni pierwszy wiersz w tabeli ( jest taki sam jak drugi ) a chodzi właśnie o to żeby zmienić drugi wiersz ;)

A co za różnica? Są takie same. Nieodróżnialne. Identyczne. Który byś nie zmienił, wynik końcowy będzie taki sam.Michał Jarosz edytował(a) ten post dnia 06.10.10 o godzinie 10:30
Radosław Bułat

Radosław Bułat Ruby on Rails
developer,
Adtaily.com

Temat: UPDATE na jednym, konkretnym wierszu.

Michał Jarosz:
Tomasz Fidos:

to zmieni pierwszy wiersz w tabeli ( jest taki sam jak drugi ) a chodzi właśnie o to żeby zmienić drugi wiersz ;)

A co za różnica? Są takie same. Nieodróżnialne. Identyczne. Który byś nie zmienił, wynik końcowy będzie taki sam.Michał Jarosz edytował(a) ten post dnia 06.10.10 o godzinie 10:30

A co najważniejsze kolejność zwracania rekordów w takim przypadku nie jest ustalona. Autor wątku musi po prostu dodać jakiś klucz główny (najprościej id int autoincrement) i po bólu.

Wojciech Gardziński

Wypowiedzi autora zostały ukryte. Pokaż autora

konto usunięte

Temat: UPDATE na jednym, konkretnym wierszu.

Radosław Bułat:
Michał Jarosz:
Tomasz Fidos:

to zmieni pierwszy wiersz w tabeli ( jest taki sam jak drugi ) a chodzi właśnie o to żeby zmienić drugi wiersz ;)

A co za różnica? Są takie same. Nieodróżnialne. Identyczne. Który byś nie zmienił, wynik końcowy będzie taki sam.Michał Jarosz edytował(a) ten post dnia 06.10.10 o godzinie 10:30

A co najważniejsze kolejność zwracania rekordów w takim przypadku nie jest ustalona. Autor wątku musi po prostu dodać jakiś klucz główny (najprościej id int autoincrement) i po bólu.
tak, wszystko sie zgadza - gdybym ja był projektantem tabeli to pierwsza kolumna to byłby autoincrement jednoznacznie numerujący wiersze ;) natomiast pytanie w pierwszym poście dotyczy hipotetycznej sytuacji gdy tabela nie ma ani PRI ani UNI na żadnej kolumnie ;)
Michał Jarosz

Michał Jarosz Frontend Developer &
Team Leader

Temat: UPDATE na jednym, konkretnym wierszu.

Wojciech Gardziński:
>
Podziel na 3 tabele (1# rek, 2# rek, reszta) popraw 2gą i sklej z powrotem

I efekt końcowy taki sam jak po powyższym update. Chyba rzeczywiście coś mi umyka.

Wojciech Gardziński

Wypowiedzi autora zostały ukryte. Pokaż autora
Michał Jarosz

Michał Jarosz Frontend Developer &
Team Leader

Temat: UPDATE na jednym, konkretnym wierszu.

No i tak się składa, że mamy te dane już w bazie danych, dla której nie ma znaczenia który z tych wierszy zmodyfikujemy.

W każdym razie ja nie jestem w stanie wyobrazić sobie scenariusza, w którym miałoby to jakieś znaczenie. Chyba, że wyciąga się dane z tabeli bez żadnego sortowania, bo chcemy mieć zachowaną kolejność w jakiej dane zostały dodane do tabeli, ale wtedy sami prosimy się o przykrą niespodziankę, bo silnik bazodanowy teoretycznie może w dowolnym momencie nam tą kolejność zmienić (praktycznie tabelę MyISAM można posortować przez ALTER TABLE, a InnoDB przy braku jawnego klucza głównego zakłada własny ukryty klucz główny i sortuje wedle niego).

Wojciech Gardziński

Wypowiedzi autora zostały ukryte. Pokaż autora

konto usunięte

Temat: UPDATE na jednym, konkretnym wierszu.

Tomasz Fidos:
Witam

Mam taki problem, sytuacja:

Istnieje sobie tabela, w której na żadnej kolumnie nie ma ani PRIMARY KEY ani UNIQUE.

tabela: test
ID LICZBA TEKST
1 0 ab1
1 0 ab1
1 243 ab2
2 132 ab3
3 346 ab4
4 457 ab5

Problem polega na tym, że chciałbym zUPDATEować jeden konkretny wiersz, jedno konkretne pole w tym wierszu.
Załóżmy wiersz 2 pole 3 zmienić 'ab1' na 'XXX'. Jako, że nie mamy klucza to nie możemy użyć WHERE.

UPDATE `test` SET `tekst` = 'XXX' LIMIT 1,2 <- oczywiście nie
> działa, ale czy macie jakiś sposób na wykonanie takiej
czynności?
Chodzi o update wykonany tylko na jednym wierszu począwszy od drugiego wiersza.

Pozdr

Skąd wiesz że akurat drugi wiersz chcesz zmienić? :) Jesli nie jest z niczym powiązany bo jeśli jest to musisz mieć jakiś klucz główny.

Do zmiany możesz użyć update ... limit 1; wtedy zmieni Ci jeden wiersz.

konto usunięte

Temat: UPDATE na jednym, konkretnym wierszu.

Jakub Purtal:
Tomasz Fidos:
Witam

Mam taki problem, sytuacja:

Istnieje sobie tabela, w której na żadnej kolumnie nie ma ani PRIMARY KEY ani UNIQUE.

tabela: test
ID LICZBA TEKST
1 0 ab1
1 0 ab1
1 243 ab2
2 132 ab3
3 346 ab4
4 457 ab5

Problem polega na tym, że chciałbym zUPDATEować jeden konkretny wiersz, jedno konkretne pole w tym wierszu.
Załóżmy wiersz 2 pole 3 zmienić 'ab1' na 'XXX'. Jako, że nie mamy klucza to nie możemy użyć WHERE.

UPDATE `test` SET `tekst` = 'XXX' LIMIT 1,2 <- oczywiście
> > nie
działa, ale czy macie jakiś sposób na wykonanie takiej czynności?
Chodzi o update wykonany tylko na jednym wierszu począwszy od drugiego wiersza.

Pozdr

Skąd wiesz że akurat drugi wiersz chcesz zmienić? :) Jesli nie jest z niczym powiązany bo jeśli jest to musisz mieć jakiś klucz główny.

Do zmiany możesz użyć update ... limit 1; wtedy zmieni Ci jeden wiersz.
Wiem, np. dlatego bo widzę wylistowane wszystkie wiersze. No i uparłem się na tego drugiego ;)
Radosław Bułat

Radosław Bułat Ruby on Rails
developer,
Adtaily.com

Temat: UPDATE na jednym, konkretnym wierszu.

Tomasz Fidos:
Wiem, np. dlatego bo widzę wylistowane wszystkie wiersze. No i uparłem się na tego drugiego ;)

Tylko musisz zdawać sobie sprawę, że to silnik bazy decyduje w jakiej kolejności Ci te rekordy wyświetli i nie powinieneś czynić żadnych założeń co do ich kolejności (może się ona zmienić z jakiegoś powodu). Dlatego nawet jak zaktualizujesz ten drugi wiersz, to może się okazać, że tak na prawdę zaktualizowałeś ten pierwszy ;). Twoje podejście jest mniej więcej tego typu: weź bliźniaków, ustaw ich losowo i temu z prawej daj 100zł. Jak zamienią się stronami to będziesz zdziwiony dlaczego jednak ten z lewej dostał stówę...

Tak jak już Ci koledzy wiele razy powtarzali: jeśli nie ma żadnego pola po którym rozróżniasz rekordy (zwykle id) to są dokładnie te same rekordy.
Michał Jarosz

Michał Jarosz Frontend Developer &
Team Leader

Temat: UPDATE na jednym, konkretnym wierszu.

Może lepszy przykład: wrzuć do woreczka dwie jednakowe kulki. Teraz na drugiej postaw postaw kropkę.

konto usunięte

Temat: UPDATE na jednym, konkretnym wierszu.

Radosław Bułat:
Tak jak już Ci koledzy wiele razy powtarzali: jeśli nie ma żadnego pola po którym rozróżniasz rekordy (zwykle id) to są dokładnie te same rekordy.
Nie do końca. Nie są to te same rekordy z punktu widzenia składowania danych. Są to jedynie rekordy zawierające identyczne dane - ale 2 różne rekordy.

co do kolejności wyświetlania zwracanych rekordów zawsze można posilić się:
ALTER TABLE `tabelka` ORDER BY `kolumna_nr1`;
... i mamy poukładane rekordy w/g własnego "widzi-misie".

Możemy na tym skończyć rozważania - chyba, że ktoś ma coś ciekawego do dodania :)
Rozwiąże problem w inny sposób :]

Następna dyskusja:

REGEXP w zapytaniu update




Wyślij zaproszenie do