![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 13 Pomógł: 0 Dołączył: 6.11.2008 Ostrzeżenie: (0%) ![]() ![]() |
Witam wszystkich serdecznie.
Mam mały problem ![]() Mam 1 tabelę w bazie danych - users:
oraz pliki php: z klasa do obslugi bazy danych - database.inc.php
oraz z klasą do obslugi uzytkownika - users.inc.php (na razie taki cwiczebny zalazek bo tu utknalem)
dzialanie moich wypocin testuje sobie wyswietlajac w pliku index.php wyniki zapytan:
oraz w pliku dodaj.php gdzie dodaje kilku testowych użytkowników korzystając ze zdefiniowanych wczesniej klas do obslugi zapytan do bazy oraz do obslugi userów dodaj.php
I tu własnie pojawia sie przedziwny problem nad ktorym siedze juz kilka ladnych godzin - przy wykonaniu skryptu dodawania userow wszystko niby idzie po koleji, ale kolejne rekordy w tabeli pojawiaja sie losowej kolejnosci zamiast po koleji na koncu tabeli - jest to zupelnie nieprzewidywalne - i tu moje pytanie -o co kaman ![]() przykład (czecia kolumna na potrzeby testu posłuzyła jako oznaczenie kolejnych wywolan skryptu - widzicie jak przedziwnie wstawia rekordy ![]() 67Bolek2miro@o2.pl99Bolek2miro@o2.pl88Peslaw2marian@o2.pl14Bolek1miro@o2.pl67Bol k1miro@o2.pl99Bolek1miro@o2.pl88Peslaw1marian@o2.pl14Bolek2miro@o2.pl88Peslaw3ma ian@o2.pl99Bolek3miro@o2.pl67Bolek3miro@o2.pl14Bolek3miro@o2.pl (przeszkadza troszke to ograniczenie długosci postu ![]() ![]() 67Bolek2miro@o2.pl99Bolek2miro@o2.pl88Peslaw2marian@o2.pl14Bolek1miro@o2.pl67Bol k1miro@o2.pl99Bolek1miro@o2.pl88Peslaw1marian@o2.pl14Bolek2miro@o2.pl88Peslaw3ma ian@o2.pl99Bolek3miro@o2.pl67Bolek3miro@o2.pl14Bolek3miro@o2. (no nic, widze, ze to chyba automat łaczy te posty i tym bardziej nie moge edytowac mojego wczesniejszego postu ![]() kolejnosc w ktorej wpisy w bazie to (trzecia kolumna oznacza w ktorym wywolaniu skryptu dodaj.php byl dodawany dany rekord, czyli powinny byc po koleji cztery jedynki, dwójki i trójki , a jest jak jest) 67 Bolek 2 miro@o2.pl 99 Bolek 2 miro@o2.pl 88 Peslaw 2 marian@o2.pl 14 Bolek 1 miro@o2.pl 67 Bolek 1 miro@o2.pl 99 Bolek 1 miro@o2.pl 88 Peslaw 1 marian@o2.pl 14 Bolek 2 miro@o2.pl 88 Peslaw 3 marian@o2.pl 99 Bolek 3 miro@o2.pl 67 Bolek 3 miro@o2.pl 14 Bolek 3 miro@o2. |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 122 Pomógł: 8 Dołączył: 20.10.2008 Ostrzeżenie: (0%) ![]() ![]() |
Witam,
Nie znam się na mysql, ale domyślam się, że są tam klucze podstawowe oraz typy sekwencyjne (z automatycznym nadawaniem wartości). Do czego jest kolumna usr_id? Dlaczego ją ustawiasz ręcznie? Przy tworzeniu nowego użytkownika. Jeżeli nie musisz nadawać im określonych idów, to zrób z tej kolumny klucz podstawowy, którego wartości same się będą zwiększać. Albo utwórz inną kolumnę do tego. Wtedy będziesz mógł po niej sortować, jeżeli będziesz potrzebował kolejności dodawania użytkowników. |
|
|
![]()
Post
#3
|
|
![]() Grupa: Zarejestrowani Postów: 2 291 Pomógł: 156 Dołączył: 23.09.2007 Skąd: ITALY-MILAN Ostrzeżenie: (10%) ![]() ![]() |
Dokladnie zgadzam sie z przedmowca masz takie cos przy tworzeniu tabeli:
Kod `usr_id` int(8) NOT NULL default '0', Usun ten defualt bo jest on niepotrzebny i potem daj auto_increment i primary key na ta kolumne potem zmien zapytanie na te wyzej i powinno hulac.
Zamien na:
-------------------- Zainteresowania: XML | PHP | MY(SQL)| C# for .NET | PYTHON
http://code.google.com/p/form-builider/ Moj blog |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 13 Pomógł: 0 Dołączył: 6.11.2008 Ostrzeżenie: (0%) ![]() ![]() |
w tej tabeli nie ma na razie żadnych danych - bo to taki tylko pojemnik na dane, pomocny przy napisaniu kilku klas własnie obslugujacyh dodawanie danych do tabel w bazie -
nie ma wiec w tej tabeli zadnych kluczy - po prostu taki zestaw kilku pol do ktorych wrzucam dane uzytkownika - i problemem jest to, ze zamiast kazdy rekord dodawac pod ostatnim wpisem to zachowuje sie conajmniej dziwnie : np dodajac pojedyncze rekordy - doadaje je na pierwszym miejscu, na poczatku tabeli, zamiast na koncu pod ostatnimi rekordami jak dodaje po kilka rekordow na raz (tak jak w przykladzie) to tez zasadniczo dodaje tez tak samo czyli : 3c 3b 3a 2c 2b 2a 1c 1b 1a grupami ale zawsze rekordy są na poczatku tabeli zamiast na koncu i w dodatku w odwrotnej kolejności niz ich dodawanie było wywoływane w skrypcie (liczba - kolejne wywolanie skryptu w ktorym są dodawane nowe rekordy, cyfry - kolejnosc dodania rekordow w skrypcie - powinno byc abc ![]() oraz czasami potrafi pozamieniać kolejność losowo (tak jak w przykładzie) a czasem po dodaniu kilkunastu rekordów zaczyna dodawać prawidłowo - i nie mam pojęcia czym to może być spowodowane, bo to najprostsze możliwe dodawanie za pomocą inserta, bez żadnych kluczy i niczego ![]() ![]() wiadomo, ze najprosciej mozna posegregowac wyswietlanie, ale problem polega na tym, ze kolejnosc zapisanych danych w bazie rozni sie od tej w jakiej powinny byc zapisane .... i stad moje zdziwko , bo nie spotkalem sie nigdy zeby dane w bazie zapisywaly sie w innej kolejnosci niz to jest wywolywane w skrypcie, w dodatku były dopisywane zamiast na koncu tabeli to na poczatku ![]() Ten post edytował blackdog 6.11.2008, 17:34:26 |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 122 Pomógł: 8 Dołączył: 20.10.2008 Ostrzeżenie: (0%) ![]() ![]() |
Ale skąd wniosek, że to kolejność zapisywania a nie wydobywania jest zła?
A klucz podstawowy w tabeli powinien być zawsze. Bo jak inaczej chcesz identyfikować wiersze? Ten post edytował michalg 6.11.2008, 17:40:43 |
|
|
![]()
Post
#6
|
|
![]() Grupa: Zarejestrowani Postów: 2 291 Pomógł: 156 Dołączył: 23.09.2007 Skąd: ITALY-MILAN Ostrzeżenie: (10%) ![]() ![]() |
Sluchaj nie mam teraz zabardzo czasu zeby ogladac caly twoj kod ale to jest podejrzane:
Hmmm return mysql_numrows($this->queryResult[$query_name]); raczej mysql_num_rows() moze i jest mysql_numrows() ale w starszych wersjach Mysql i to tez moze byc przyczyna ze w nowszej wersji zle sie to zachowuje to raz a dwa to to ze jesli nie ma klucz(id) ani auto_increment to dane moga byc wsadzane wedlug sortowania w mysql skoro nie ma zadnych kluczy wedlug ktorych sortowac/dodawac dane moze i sie myle. Sproboj zrobic to ci ci napisalem w poscie wyzej i powiedz czy dziala tak samo. P.S mysql_numfields() chyba tez powinno byc mysql_num_fields(); Ten post edytował marcio 6.11.2008, 17:43:22 -------------------- Zainteresowania: XML | PHP | MY(SQL)| C# for .NET | PYTHON
http://code.google.com/p/form-builider/ Moj blog |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 13 Pomógł: 0 Dołączył: 6.11.2008 Ostrzeżenie: (0%) ![]() ![]() |
hmm, moze faktycznie jezeli niema zadnego klucza zdefinowanego, to MySql sobioe jakos przedziwnie sam sortuje i wsadza dane w klejnosci przez siebie ustalonej, bo dla testów sprobowalem dodac pare rekordow w sposob calkowicie klasyczny :
i zachowuje sie identiko przy kolejnych kilku wywolaniach skryptu tez kolejnosc wpisow w bazie odwrotna niz to okreslono w skrypcie (no i oczywiscie fantazyjnie pomieszana) ![]() |
|
|
![]()
Post
#8
|
|
![]() Grupa: Zarejestrowani Postów: 2 291 Pomógł: 156 Dołączył: 23.09.2007 Skąd: ITALY-MILAN Ostrzeżenie: (10%) ![]() ![]() |
No to chyba moja teoria jest prawdziwa
![]() -------------------- Zainteresowania: XML | PHP | MY(SQL)| C# for .NET | PYTHON
http://code.google.com/p/form-builider/ Moj blog |
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 13 Pomógł: 0 Dołączył: 6.11.2008 Ostrzeżenie: (0%) ![]() ![]() |
wyglada na to, że Twoja teoria sie sprawdza - po ustawieniu w bazie pola usr_id jako klucz główny dla tabeli i włączeniu autoincrement zaczełodziałac poprawnie
![]() ciekawi mnie jeszcze czy jest jakis łatwy sposób, żeby zerowac wartosc tego liczniczka ![]() |
|
|
![]()
Post
#10
|
|
![]() Grupa: Zarejestrowani Postów: 2 291 Pomógł: 156 Dołączył: 23.09.2007 Skąd: ITALY-MILAN Ostrzeżenie: (10%) ![]() ![]() |
Usunac tabele i utworzyc ja na nowo
![]() -------------------- Zainteresowania: XML | PHP | MY(SQL)| C# for .NET | PYTHON
http://code.google.com/p/form-builider/ Moj blog |
|
|
![]()
Post
#11
|
|
Grupa: Zarejestrowani Postów: 13 Pomógł: 0 Dołączył: 6.11.2008 Ostrzeżenie: (0%) ![]() ![]() |
hehe, a jednak guzik
![]() ![]()
hmm, czy nie ma mozliwosci zeby dane były zapisane w tabeli w bazie w takiej kolejnosci jak chce user, czyli powiedzmy po koleji tak jak to następowało, żęby na koncu tabeli były najswiezsze wpisy i zeby na id szło pokoleji a nie całkiem losowo ![]() |
|
|
![]()
Post
#12
|
|
Grupa: Zarejestrowani Postów: 122 Pomógł: 8 Dołączył: 20.10.2008 Ostrzeżenie: (0%) ![]() ![]() |
Ale masz order by usr_id?
A dlaczego chciałeś zerować id? Nie powinieneś się przejmować, że tam są dziury - tak naprawdę to powinno służyć do identyfikacji wiersza, nie do wyświetlania. |
|
|
![]()
Post
#13
|
|
![]() Grupa: Zarejestrowani Postów: 2 291 Pomógł: 156 Dołączył: 23.09.2007 Skąd: ITALY-MILAN Ostrzeżenie: (10%) ![]() ![]() |
Hmmm teraz juz dokonca nie rozumiem
![]() Jesli dodasz jakies rekordy to w bazie zawsze ostatni rekord powinien byc pierwszy jesli kazdy wpis ma id(z auto_increment i primary keys) w przeciwnm wypadku moze pokazywac jak chce lub za pomoca kryterium ktore jest w SORTUJ WEDLUG KLUCZA i wybierasz wedlug jakie kolumny ma sortowac Hmm wynik wyjasnienia tabeli user_n Kod table type possible_keys key key_len ref rows Extra user_n ALL [i]NULL[/i] [i]NULL[/i] [i]NULL[/i] [i]NULL[/i] 4 Using filesort Moze to cos znaczy? Nie znam sie az tak na Mysql jednak gdy pobierasz rekordy ktore maja auto_increment i primary key za pomoca sortowania w sql order by jest ok? @michalg mu chyba chodzi ze przegladajac zawartosc tabeli w phpmyadmin wpisy sa zle sortowane P.S2 doczytalem sie jednej rzeczy nie wiem czy dziala bo nie sprawdzalem zeby wyzerowac id gdy nie ma juz rekordow w danej tabeli sproboj uzyc zapytania: Kod ALTER TABLE `table` AUTO_INCREMENT = 0
Ten post edytował marcio 6.11.2008, 18:49:08 -------------------- Zainteresowania: XML | PHP | MY(SQL)| C# for .NET | PYTHON
http://code.google.com/p/form-builider/ Moj blog |
|
|
![]()
Post
#14
|
|
Grupa: Zarejestrowani Postów: 13 Pomógł: 0 Dołączył: 6.11.2008 Ostrzeżenie: (0%) ![]() ![]() |
hmm, ja sprawdzam sobie co jest w bazie takze zpod phpmyadmina
![]() mnie po prostu denerwuje, ze w bazie rekordy są pomieszane i zamist powiedzmy kolejnych id: 44 45 46 47 mam kolejnosc ustaloną w jakis kosmiczny sposób przez baze danych czyli np: 45 48 47 46 wczesnie juz troszke działałem na bazach danych i z php i z jsp - tylko miałem delikatną przerwę ![]() ![]() PS. ten autoinkrementujacy sie liczniczek nie sksowal mi sie po usunieciu tabeli a nawet po restrcie bazy ![]() Ten post edytował blackdog 6.11.2008, 18:50:47 |
|
|
![]()
Post
#15
|
|
![]() Grupa: Zarejestrowani Postów: 2 291 Pomógł: 156 Dołączył: 23.09.2007 Skąd: ITALY-MILAN Ostrzeżenie: (10%) ![]() ![]() |
Cytat PS. ten autoinkrementujacy sie liczniczek nie sksowal mi sie po usunieciu tabeli a nawet po restrcie bazy ![]() Sproboj zrobic tak jak napisalem w P.S2 Tylko dana tabela nie moze miec rekordow bo jak nie moze w ogole nic nie dzialac Ten post edytował marcio 6.11.2008, 18:54:08 -------------------- Zainteresowania: XML | PHP | MY(SQL)| C# for .NET | PYTHON
http://code.google.com/p/form-builider/ Moj blog |
|
|
![]()
Post
#16
|
|
Grupa: Zarejestrowani Postów: 13 Pomógł: 0 Dołączył: 6.11.2008 Ostrzeżenie: (0%) ![]() ![]() |
PS.2 dział
![]() ![]() po dodaniu do zapytania sortowania po id skrypt zaczął wyswietlac dane posegregowane ![]() ![]() ![]() ![]() ![]() ![]() |
|
|
![]()
Post
#17
|
|
![]() Grupa: Zarejestrowani Postów: 2 291 Pomógł: 156 Dołączył: 23.09.2007 Skąd: ITALY-MILAN Ostrzeżenie: (10%) ![]() ![]() |
Moze poprostu cos sie przestawilo w bazie i po dodaniu order by wszystko wrocilo do normy no coz przynajmniej wiem znamy nastepne segrety bazy Mysql
-------------------- Zainteresowania: XML | PHP | MY(SQL)| C# for .NET | PYTHON
http://code.google.com/p/form-builider/ Moj blog |
|
|
![]()
Post
#18
|
|
Grupa: Zarejestrowani Postów: 13 Pomógł: 0 Dołączył: 6.11.2008 Ostrzeżenie: (0%) ![]() ![]() |
a jeszcze mam pytanie takie
![]() używając tej klasy Sql tworze sobie obiekty gdzie w konstruktorze inicjowane jest połączenie z bazą danych. mam też destruktor, gdzie połączenie jest zamykane i teraz jest taki zonk, że przy tworzeniu połaczenia, niezaleznie od tego, ile obiektow sql utworzę i gdzie, to we wszystkich tych obiektach identyfikator połaczenia z bazą (czyli $cid) ma wartosc #5 (tak to przynajmniej wyswietla ![]() i tu jest własnie zonk - pokaze przyklad:
bo w klasie cUsers jest funkcyjka gdzie podkaladm z bazy danych do obiektu dane przykladowej osoby o podanym id i wewnatrz tej funkji tez jest oczywiscie wykonywane zapytanie z uzyciem klasy sql - i ono tez tworzy połaczenie z baza o identyfikatorze połączenia $cid = #5 Co z tego wynika - przy wyjsciu z tej funkcji destruktor ubija to polaczenie (o indentyfikatorze #5) i po wykonaniu pliku index.php gdy destruktor chce zniszczyc polaczenie tworzone przy obiekcie $s (jedna z pierwszych linijek) to wywala warninga, bo juz nie ma takiego polaczenia - zamkniete wewnatrz funkcji... i dla eksperymentów zrobilem kilka obiektow klasy sql i sprawdzilem, jakie maja identyfikatory polaczenia - i wyglada na to, ze wszystkie maja zawsze ten sam - czy to jest normalne i tak powinno byc ? bo przy czyms takim wywala mi sie destruktor majacy zamykac polaczenia ![]() Czy olac to i po prostu wywalic destruktor i zdac sie na automatyczne zamykanie polaczen przez php ? |
|
|
![]()
Post
#19
|
|
![]() Grupa: Zarejestrowani Postów: 2 291 Pomógł: 156 Dołączył: 23.09.2007 Skąd: ITALY-MILAN Ostrzeżenie: (10%) ![]() ![]() |
Cytat Czy olac to i po prostu wywalic destruktor i zdac sie na automatyczne zamykanie polaczen przez php ? Mysle ze bym nie kombinowal i bym tak zrobil lub zamykal polaczenie recznie za pomoca sqlClose(); -------------------- Zainteresowania: XML | PHP | MY(SQL)| C# for .NET | PYTHON
http://code.google.com/p/form-builider/ Moj blog |
|
|
![]()
Post
#20
|
|
Grupa: Zarejestrowani Postów: 13 Pomógł: 0 Dołączył: 6.11.2008 Ostrzeżenie: (0%) ![]() ![]() |
znalazłem rozwiązanie w innym świeżo założonym wątku
![]() kostruktor klasy odpowiadajacej za obsluge bazypowinien wygladac tak
w konstruktorze w wywołaniu funkcji mysql_connect($host,$user,$pass,TRUE) brakowało włąsnie tego 4tego parametru TRUE który decyduje czy nawiazac nowe połączenie do bazy (jeżeli jest) czy zwrócic identyfikator aktualnego połaczenia (jeżeli nie ma parametru lub jest FALSE) ![]() fajne to forum ![]() Ten post edytował blackdog 7.11.2008, 13:42:44 |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 14.08.2025 - 05:29 |