Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> jakie zrobic zapytanie nadajace kolejne wartosci
piotrekkr
post
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
Go to the top of the page
+Quote Post
bronx
post
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
Go to the top of the page
+Quote Post
piotrekkr
post
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
Go to the top of the page
+Quote Post
nospor
post
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)
Go to the top of the page
+Quote Post
piotrekkr
post
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
Go to the top of the page
+Quote Post
spenalzo
post
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
Go to the top of the page
+Quote Post
piotrekkr
post
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.
Go to the top of the page
+Quote Post
bigZbig
post
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.
Go to the top of the page
+Quote Post
piotrekkr
post
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)
Go to the top of the page
+Quote Post
art
post
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");


  1. INSERT
  2. INTO nazwa_tabeli
  3. (tytul, opis, kolejnosc) VALUES('$tytul','$opis','$kolejnosc')
Go to the top of the page
+Quote Post
bigZbig
post
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?
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 22.08.2025 - 19:08