![]() |
![]() ![]() |
![]() |
![]() ![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 386 Pomógł: 25 Dołączył: 28.09.2005 Ostrzeżenie: (0%) ![]() ![]() |
witam mam problem mam tabele ForumDzialy i mam tam kolumny DzialId Nazwa Opis DataUtworzenia i Kolejnosc. Chce wstawic wiersz jakis i zeby on mial w kolumnie Kolejnosc najwieksza dotychczasowa wartosc z tej kolumny powiekszona o 1.
proboiwalem czagos takiego : Kod INSERT INTO `ForumDzialy` SET `DzialId`= null ,`Nazwa` = 'aaaaa', `Opis` = 'aaaaa',`DataUtworzenia` = '2006-03-21', `Kolejnosc`= (SELECT MAX(`Kolejnosc`) FROM `ForumDzialy`)+1 i wyskoczyl komunikat Kod ERROR 1093 (HY000): You can't specify target table 'ForumDzialy' for update in FROM clause nie wiem czy to wogole sie da zrobic w jednym zapytaniu. pomocy Ten post edytował piotrekkr 22.03.2006, 14:44:59 |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 333 Pomógł: 0 Dołączył: 4.03.2004 Ostrzeżenie: (0%) ![]() ![]() |
w jednym zapytaniu nie zrobisz dwóch takich rzeczy. Jednym zapytaniem pobierasz najwyższą wartość, dodajesz jeden i drugim zapytaniem dodajesz już nowy rekord
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 386 Pomógł: 25 Dołączył: 28.09.2005 Ostrzeżenie: (0%) ![]() ![]() |
wydaje mi sie ze to jest mozliwe tylko ja nie wiem jak to zrobic. chyba zadam to samo pytanie w dziale mysql
|
|
|
![]()
Post
#4
|
|
Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
Cytat chyba zadam to samo pytanie w dziale mysql ani mi się waż (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) proponuje zapoznac sie z regulaminem.ps: sam tam przeniosę (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 386 Pomógł: 25 Dołączył: 28.09.2005 Ostrzeżenie: (0%) ![]() ![]() |
sori nie wiedzialem i przenioslem ide przeczytac regulamin
przeczytalem regulamin (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) troche zajmuje przy okazji okazalo sie ze to jednak prawda ze nie da rady jednym zapytaniem. W manualu napisali takie cos Cytat Error 1093 (ER_UPDATE_TABLE_USED) SQLSTATE = HY000 Message = "You can't specify target table 'x' for update in FROM clause" This error occurs in cases such as the following: UPDATE t1 SET column2 = (SELECT MAX(column1) FROM t1); You can use a subquery for assignment within an UPDATE statement because subqueries are legal in UPDATE and DELETE statements as well as in SELECT statements. However, you cannot use the same table (in this case, table t1) for both the subquery's FROM clause and the update target. trzeba bedzie recznie no nic trudno sie mowi. Ten post edytował piotrekkr 22.03.2006, 17:05:00 |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 2 064 Pomógł: 1 Dołączył: 22.01.2003 Skąd: Poznań Ostrzeżenie: (0%) ![]() ![]() |
Cytat(piotrekkr @ 2006-03-22 15:33:48) witam mam problem mam tabele ForumDzialy i mam tam kolumny DzialId Nazwa Opis DataUtworzenia i Kolejnosc. Chce wstawic wiersz jakis i zeby on mial w kolumnie Kolejnosc najwieksza dotychczasowa wartosc z tej kolumny powiekszona o 1. Według mnie ustawienie pola na auto_increment chyba rozwiąząłoby problem |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 386 Pomógł: 25 Dołączył: 28.09.2005 Ostrzeżenie: (0%) ![]() ![]() |
chodzi o to ze ja juz mam pole DzialId ktore jest auto_increment i proimary key dodanie auto_increment nic mi nie da bo ja planuje usuwanie dzialow i zmiane kolejnosci a chce zeby wciaz byly po koleji wszystkie pola, wiec pole tego typu odpada. Ale dziaki za zainteresowanie. Juz mam pomysl jak to zrobic. wystarczy odpowiednia funkcje napisac.
|
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 740 Pomógł: 15 Dołączył: 23.08.2004 Skąd: Poznań Ostrzeżenie: (0%) ![]() ![]() |
Do pozycjonowania wpisow powinienes uzyc dodatkowego pola, a nie pola identyfikatora i to z ustawiona opcja auto_increment, albo wylacz auto_incremetn bo sie jedno z drugim wyklucza.
|
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 386 Pomógł: 25 Dołączył: 28.09.2005 Ostrzeżenie: (0%) ![]() ![]() |
no wlasnie to dodatkowe pole do pozycjonowania nazywa sie u mnie Kolejnosc a nie DzialId (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
|
|
|
![]()
Post
#10
|
|
Grupa: Zarejestrowani Postów: 63 Pomógł: 0 Dołączył: 31.08.2003 Ostrzeżenie: (0%) ![]() ![]() |
Ja robie to w ten sposób:
- dodaje w bazie pole 'kolejnosc' - przy dodawaniu nowego rekordu poprzez skrypt w pole kolejnosc wstawiam sobie znacznik czasu (znacznik jest unikalny wiec masz pewnosc ze kazde pole bedzie mialo inny numerek - wiekszy od poprzedniego): Cytat // za pomocą funkcji date() pobieram znacznik czasu $kolejnosc=date("U");
|
|
|
![]()
Post
#11
|
|
Grupa: Zarejestrowani Postów: 740 Pomógł: 15 Dołączył: 23.08.2004 Skąd: Poznań Ostrzeżenie: (0%) ![]() ![]() |
Cytat(art @ 2006-03-31 10:30:25) znacznik jest unikalny wiec masz pewnosc ze kazde pole bedzie mialo inny numerek - wiekszy od poprzedniego Jestes w bledzie Po pierwsze istnieje (co prawda nikla) szansa, ze dwoch uzytkownikow w tym samym czasie bedzie usilowalo dodac wpis do tabeli Po drugie znacznik czasu zalezy od zegara systemowego. Wystarczy zimowa lub letnia zmiana czasu i mozesz sie spotkac z problemem. Poza tym jakiej dlugosci jest pole auto_increment a jakiej pole przechowujace znacznik czasu? |
|
|
![]() ![]() |
![]() |
Aktualny czas: 22.08.2025 - 19:08 |