Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Problem ze skryptem wpisujacym do bazy liczbe o 1 wieksza
Forum PHP.pl > Forum > PHP
xiveris
witam,
mam pewien problem na mojej stronie, otoz chcialbym aby wartosc memb_guid z kazda nowa operacja tego skryptu do bazy wprowadzala o 1 wyzsza wartosc niz jest obecnie w bazie, probowalem juz roznych sposobow jednak nie moge tego rozgryzc
probowalem to robic min na zmiennych, przykladowo:
$subquery = mssql_query('SELECT MAX(MEMB_GUID) + 1 FROM MEMB_INFO', $link);
$result = mssql_result($subquery,0,0);
pozniej zamiast 1 wkladam zmienna result,

probowalem takze selecta wkladac bezposrednio do proceduty, jednak ciagle nie dziala.
Dodam iz w bazie zmienna memb_guid jest typu INT oraz jest kluczem glownym, dopiero ppo zdjeciu z niej rekordy kolejne sie wpisuja, ale co to ma za sens jesli wszedzie jest 1. Jesli ktos potrafilby rozgryzc ten przypadek bylbym bardzo wdzieczny.

Kod
mssql_query("INSERT INTO VI_CURR_INFO (ends_days,chek_code,used_time,memb___id,memb_name ,[b]memb_guid[/b],sno__numb,Bill_S
ection,Bill_value,Bill_Hour,Surplus_Point,Surplus_ Minute,Increase_Days ) VALUES ('20055','1',1234,'$login','$login',[b]1[/b],'7','6','3', '6','6',getdate(),'0' )") or die('error, account exists');

mssql_query("SET IDENTITY_INSERT MEMB_INFO ON INSERT INTO MEMB_INFO ([b]memb_guid[/b],memb___id,memb__pwd,memb_name,sno__numb ,post_code,addr_info,addr_deta,tel__numb,mail_addr,phon_numb,fpas_ques,fpas_answ
job__code,appl_days,modi_days,out__days,true_days,mail_chek,bloc_code,ctl1_co de) VALUES ('[b]1[/b]','$login','$pw','$name', '1','1234','11111','personalid','12343','$email',' $email','$prq','$pra','1',getdate(),getdate(),getd ate(),getdate(),'1','0','1')") or die('error, query failed');


Za wszelkie rady z gory dziekuje
Fifi209
Daj to pole jako primary key i daj mu auto_increment
xiveris
Mam ustawione obecnie tak:

zmiana na primary key podowuje tylko blad informujacy o tym iz probuje sie wprowadzic taka sama wartosc w pole gdzie nie mozna tego robic czyli z kluczem
Fifi209
Cytat(xiveris @ 30.07.2009, 11:51:51 ) *
Mam ustawione obecnie tak:

zmiana na primary key podowuje tylko blad informujacy o tym iz probuje sie wprowadzic taka sama wartosc w pole gdzie nie mozna tego robic czyli z kluczem


Sorki moje niedopatrzenie, używasz mssql! Zakręciłem się i przeczytałem mysql... Przepraszam za wprowadzenie w błąd.

P.S. Czemu używasz tego sh*tu?
xiveris
Nie mam wyboru musze SQL bo nic innego nie wspiera tego smile.gif
Od strony skryptu zatem trzeba by cos napewno zrobic aby wpisywalo wlasciwie? jakies rady?
Fifi209
Nie wiem jak to jest w mssql, możesz pobrać najwyższe memb_guid dodać jeden i wrzucić to do zapytania, które dodaje rekord do bazy.
xiveris
Chce wlasnie cos takiego zrobic tylko ze za kazdym razem mi jakis blad pojawia sie.
Fifi209
Nie wiem czy jest ale powinna być funkcja count, gdybyś ją tak zastosował na memb_guid winksmiley.jpg i potem do tego co zwróci serwer dodał jeden?
krowal
Po pierwsze powinno to być załatwione przez autoincrement, a co do Twojego postu fifi209 to nie count ale max powinno być zastosowane winksmiley.jpg
Fifi209
Cytat(krowal @ 30.07.2009, 13:05:51 ) *
Po pierwsze powinno to być załatwione przez autoincrement, a co do Twojego postu fifi209 to nie count ale max powinno być zastosowane winksmiley.jpg


Skoro mu auto_increment nie działa o którym pisałem wcześniej, max o którym on pisał nie działa...to dałem propozycję z count
krowal
No to wyobraź sobie coś takiego: są sobie trzy rekordy:
id: 1
id: 2
id: 3

usuwasz id:2, zostaje:
id: 1
id: 3

robisz count(id) -> otrzymujesz 2, dodajesz 1 i wychodzi Ci że nowy rekord powinien mieć id:3 i wychodzi coś takiego:
id:1
id:3
id:3

chyba że masz unique na tym polu, ale wtedy nie dodasz go w ogóle smile.gif
xiveris
Mozecie mi napisac jakby ten skrypt mial w takim razie wygladac aby dzialal jak nalezy?
Fifi209
Cytat(xiveris @ 30.07.2009, 13:53:37 ) *
Mozecie mi napisac jakby ten skrypt mial w takim razie wygladac aby dzialal jak nalezy?


Pole to dajesz jako auto_increment i primary key winksmiley.jpg i po sprawie.
xiveris
gdzie mozna ustawic to pole jako auto_increment?

Obecny blad jaki otrzymuje to podczas proby wywolania:
Kod
Warning: mssql_query() [function.mssql-query]: message: Violation of PRIMARY KEY constraint 'PK_MEMB_INFO_1'. Cannot insert duplicate key in object 'dbo.MEMB_INFO'.
phpion
IDENTITY załatwi sprawę (odpowiednik AUTO_INCREMENT z MySQL).

Cytat(fifi209 @ 30.07.2009, 13:12:20 ) *
P.S. Czemu używasz tego sh*tu?

Bez komentarza... sciana.gif
xiveris
tylko ze sprawa jest taka iz mam juz istniejaca baze danych i nie chcialbym jej usuwac, zalezaloby mi aby dodac te opcje do istniejacej.
A opis przedstawiony powyzej wymaga usuniecia tabeli.

Moze zamiast kombinowac z baza macie jakis pomysl jakie polecenie wrzucic aby to ono wczytywalo sobie z bazy najwieksza wartosc i powiekszala ja o 1.
probowalem w miejsce 1 wrzucic takie cos:
Kod
select (select max(memb_guid) from MEMB_INFO)+1


niestety bezskutecznie gdyz blad wyskakuje iz nie mozna zapisac zmiennej typu var w miejsce gdzie powinna byc zmienna int

edit:
rozgryzlem problem w memb_info tabeli, problemem byl zapis:
Kod
SET IDENTITY_INSERT MEMB_INFO ON

po jego usunieciu, oraz usunieciu wpisow odnosnie memb_guid z inserta, baza sama sobie dodaje 1 do tego smile.gif co do 2 to postapilem podobnie smile.gif
dzieki wszystkim za udzielona pomoc i pozdrawiam
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.