Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Problem z ID
kpjeziorak
post 25.05.2005, 13:00:24
Post #1





Grupa: Zarejestrowani
Postów: 86
Pomógł: 0
Dołączył: 21.12.2003
Skąd: Iława

Ostrzeżenie: (0%)
-----


Witam,
mam w bazie danych tabele z trzema kolumnami np. id | kolumna1 | kolumna2
powiedzmy ze dodalem 50 rekordow do tabeli za pomoca formularza, w polu id - numer wzrasta o 1 wraz z dodaniem kolejnych rekordow, ale dalej jest problem:
gdy usune jeden z rekordow jego id przepada "na zawsze". Gdy usune rekord o id 20 to jego ide juz nie moge odzysjac. Chcialbym aby po usunieciu ktoregos z rekordow id pozostalych automatycznie sie "przesowalo, tak by zawsze bylo po kolei. Gdy usune ostatni dodany rekord (o najwyzszym id) to po dodaniu kolejnego rekordu nie zwieksza sie id o 1, a o tyle ile bylo usunietuch rekordow. Zalezy mi na tym zeby id bylo zawsze uszeregowane rosnaco.

Bede wdzieczny za wytlumaczenie mi bledow ktore robie. Nie wiem czy mam podawac jakies zrodla kodow, jesli tak to powiedzcie mi o tym. Dzieki!


--------------------
Jeziorak-Iława.pl
www.jeziorak-ilawa.pl
krystian@jeziorak-ilawa.pl
Go to the top of the page
+Quote Post
nospor
post 25.05.2005, 13:06:53
Post #2





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




autoincrement dziala tak, że zawsze dodaje o jeden więcej niż ostatnio bylo. Nawet jakby ci się udalo po usunięciu rekordu inne id zmniejszyc, to i tak następny dodany będzie miał o jeden większy od ostatnio dodanego czyli już nie pokolei. Nie ma więc sensu tutaj robić autoincrement, tylko sam musisz nadawać nowym rekordom id.


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
kpjeziorak
post 25.05.2005, 13:09:23
Post #3





Grupa: Zarejestrowani
Postów: 86
Pomógł: 0
Dołączył: 21.12.2003
Skąd: Iława

Ostrzeżenie: (0%)
-----


Faktycznie mam w polu id ustawione "auto_increment", a jesli go usune to bedzie id dodawalo sie po kolei?


--------------------
Jeziorak-Iława.pl
www.jeziorak-ilawa.pl
krystian@jeziorak-ilawa.pl
Go to the top of the page
+Quote Post
nospor
post 25.05.2005, 13:19:45
Post #4





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




jesli go usuniesz to sam bedziesz musial nadawac id. Ale i tak to musisz zrobić skoro chcesz mieć spelnione swoje zalożenia (autoincrement tu nie ma sensu)


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
FiDO
post 25.05.2005, 14:30:38
Post #5





Grupa: Przyjaciele php.pl
Postów: 1 717
Pomógł: 0
Dołączył: 12.06.2002
Skąd: Wolsztyn..... Studia: Zielona Góra

Ostrzeżenie: (0%)
-----


Cytat(kpjeziorak @ 2005-05-25 14:00:24)
Chcialbym aby po usunieciu ktoregos z rekordow id pozostalych automatycznie sie "przesowalo, tak by zawsze bylo po kolei. Gdy usune ostatni dodany rekord (o najwyzszym id) to po dodaniu kolejnego rekordu nie zwieksza sie id o 1, a o tyle ile bylo usunietuch rekordow. Zalezy mi na tym zeby id bylo zawsze uszeregowane rosnaco.

Po co Ci to? Co chcesz w ten sposob osiagnac? Bo pola ID sa w znacznej wiekszosci przypadkow "tylko" kluczami podstawowymi, a ich idea polega na jednoznacznym okresleniu rekordu przez ten numer. To ze usuniesz numer ze srodka wcale nie narusza tego warunku.. nadal kazdy numer ID jednoznacznie okresla rekord, a ID i tak sa uszeregowane rosnaco (mimo ewentualnych "dziur"), wiec napisz moze do czego dazysz, bo wydaje mi sie ze chcesz cos niepotrzebnie przekombinowac z tym ID.


--------------------
Brak czasu :/
Go to the top of the page
+Quote Post
kpjeziorak
post 25.05.2005, 17:01:24
Post #6





Grupa: Zarejestrowani
Postów: 86
Pomógł: 0
Dołączył: 21.12.2003
Skąd: Iława

Ostrzeżenie: (0%)
-----


FiDO, juz Ci tlumacze o co mi chodzi:
Mam dwie tabele na serwerze:

  1. CREATE TABLE jez_mecz_sezon (
  2. id int(3) NOT NULL AUTO_INCREMENT,
  3. nazwa_sezonu char(9) DEFAULT NULL,
  4. nazwa_ligi varchar(50) DEFAULT NULL,
  5. PRIMARY KEY (`id`),
  6. KEY `id` (`id`,`nazwa_sezonu`,`nazwa_ligi`)
  7. ) TYPE=MyISAM;


oraz

  1. CREATE TABLE jez_mecz_dane (
  2. id int(3) NOT NULL AUTO_INCREMENT,
  3. nr_kolejki int(2) NOT NULL,
  4. id_sezonu int(3) NOT NULL,
  5. DATA DATETIME DEFAULT NULL,
  6. gosp VARCHAR(255) DEFAULT NULL,
  7. gosp_br int(2) DEFAULT NULL,
  8. gosc VARCHAR(255) DEFAULT NULL,
  9. gosc_br int(2) DEFAULT NULL,
  10. gosp_strzelcy VARCHAR(255) DEFAULT NULL,
  11. gosc_strzelcy VARCHAR(255) DEFAULT NULL,
  12. gosp_zk VARCHAR(255) DEFAULT NULL,
  13. gosc_zk VARCHAR(255) DEFAULT NULL,
  14. gosp_czk VARCHAR(255) DEFAULT NULL,
  15. gosc_czk VARCHAR(255) DEFAULT NULL,
  16. gosp_sklad VARCHAR(255) DEFAULT NULL,
  17. gosc_sklad VARCHAR(255) DEFAULT NULL,
  18. widownia int(5) DEFAULT NULL,
  19. PRIMARY KEY (`id`),
  20. KEY `id` (`id`,`nr_kolejki`,`id_sezonu`)
  21. ) TYPE=MyISAM


Mam rowniez formularze, dzieki ktorym wprowadzam dane do obu tabel. Gdy prowadzam mecz "identyfikuje" go z odpowiednim sezonem za pomoca wpisywania tych samych danych w 'id' z pierwszej tabeli i 'id_sezonu' z drugiej tabeli. Bedzie mi to potrzebne, gdyz bede chcial wyswietlac mecze z kazdego sezonu ODDZIELNIE a nie wszystkie mecze na raz. W ten sposob chce stworzyc jakby "relacje" miedzy tymi tabelami.

Z gory prosze nie smiej sie ze mnie, ja jestem zielony jesli chodzi o php i mysql, ale chce sie nauczyc, a ponoc najlepiej uczy sie na wlasnych bledach winksmiley.jpg
Moze znasz lepszy pomysl by osiagnac to co chce?


--------------------
Jeziorak-Iława.pl
www.jeziorak-ilawa.pl
krystian@jeziorak-ilawa.pl
Go to the top of the page
+Quote Post
FiDO
post 25.05.2005, 23:00:51
Post #7





Grupa: Przyjaciele php.pl
Postów: 1 717
Pomógł: 0
Dołączył: 12.06.2002
Skąd: Wolsztyn..... Studia: Zielona Góra

Ostrzeżenie: (0%)
-----


Cytat
Gdy prowadzam mecz "identyfikuje" go z odpowiednim sezonem za pomoca wpisywania tych samych danych w 'id' z pierwszej tabeli i 'id_sezonu' z drugiej tabeli. Bedzie mi to potrzebne, gdyz bede chcial wyswietlac mecze z kazdego sezonu ODDZIELNIE a nie wszystkie mecze na raz. W ten sposob chce stworzyc jakby "relacje" miedzy tymi tabelami.

No i dobrze.. tak sie wlasnie tworzy relacje. Ale przeciez nie potrzebujesz do tego, zeby ciag ID sezonow byl bez "dziur" w srodku. To w zadnym wypadku nie przeszkadza. A jesli chcialbys zachowac ciag bez dziur to byloby to raczej ciezkie, z tego wzgledu, ze jak usunalbys jakis sezon ze srodka, to musialbys wszystkie z wiekszym ID "cofnac" o 1. Wiazaloby sie to z koniecznoscia cofniecia ID kazdemu meczowi (z sezonu o wyzszym ID niz ten wlasnie usuniety), jednym slowem.. duzo roboty.. niepotrzebnej roboty.
Nic nie stoi na przeszkodzie, abys mial dziurawe jak ser szwajcarski numerki ID ;]
Tak wiec nie rozumiem z czym masz problem...

Cytat
Z gory prosze nie smiej sie ze mnie, ja jestem zielony jesli chodzi o php i mysql, ale chce sie nauczyc, a ponoc najlepiej uczy sie na wlasnych bledach winksmiley.jpg

Nie bylo w tym pytaniu nic smiesznego, wiec sie nie martw smile.gif


--------------------
Brak czasu :/
Go to the top of the page
+Quote Post
kpjeziorak
post 3.06.2005, 20:52:35
Post #8





Grupa: Zarejestrowani
Postów: 86
Pomógł: 0
Dołączył: 21.12.2003
Skąd: Iława

Ostrzeżenie: (0%)
-----


Ehh ja jak zwykle mam problemy... nie chcialem zakladac nowego tematu, wiec napisze w tym. Mam dwa pliki, oto ich kody zrodlowe:

dodaj_mecz.php
  1. <head>
  2. <meta http-equiv="Content-type" content="text/html; charset=iso-8859-2"/>
  3. <title>Jeziorak-Iława.pl :: Dodaj sezon</title>
  4. </head>
  5. <body>
  6. <TABLE border=0 cellpadding=5 width=770>
  7. <form action="zapisz_mecz.php" method="post">
  8. <tr>
  9. <td align=center colspan=4><b><u>Dodawanie meczu do bazy :: Jeziorak-Iława.pl</u></b></td>
  10. </tr>
  11. <tr>
  12. <td><b>Nr kolejki:</b></td>
  13. <td><input size="2" type="text" name="nr_kolejki"></td>
  14. <td><b>ID sezonu:</b></td>
  15. <td><input size="2" type="text" name="id_sezonu"></td>
  16. </tr>
  17. <tr>
  18. <td><b>Data i godz.:</b></td>
  19. <td><input size="20" type="text" name="data"></td>
  20. <td colspan=2>Sprawdź ID sezonu tutaj: <a href="pokaz_sezony.php" target="_blanc">ID SEZONU</a></td>
  21. </tr>
  22. <tr>
  23. <td colspan=4>Poprawny format daty: YYYY-MM-DD GG:MM:SS, np. 2005-12-23 17:00:00</td>
  24. </tr>
  25. <tr>
  26. <td><b>Gospodarze:</b></td>
  27. <td><input size="20" type="text" name="gosp"></td>
  28. <td><b>Goście:</b></td>
  29. <td><input size="20" type="text" name="gosc"></td>
  30. </tr>
  31. <tr>
  32. <td align=center colspan=4>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Wynik meczu:</td>
  33. </tr>
  34. <tr>
  35. <td align=center colspan=4><b>Bramki gospodarz&nbsp;&nbsp;&nbsp;</b>&nbsp;&nbsp;<input size="2" type="text" name="gosp_br">&nbsp;-&nbsp;<input size="2" type="text" name="gosc_br">&nbsp;&nbsp;<b>&nbsp;&nbsp;&nbsp;Bramki gość</b></td>
  36. </tr>
  37. <tr>
  38. <td align=right colspan=4><b>Strzelcy dla gospodarzy:</b>&nbsp;<input size="73" type="text" name="gosp_strzelcy"></td>
  39. </tr>
  40. <tr>
  41. <td align=right colspan=4><b>Strzelcy dla gości:</b>&nbsp;<input size="73" type="text" name="gosc_strzelcy"></td>
  42. </tr>
  43. <tr>
  44. <td align=right colspan=4><b>Żółte kartki gospodarz:</b>&nbsp;<input size="73" type="text" name="gosp_zk"></td>
  45. </tr>
  46. <tr>
  47. <td align=right colspan=4><b>Żółte kartki gość:</b>&nbsp;<input size="73" type="text" name="gosc_zk"></td>
  48. </tr>
  49. <tr>
  50. <td align=right colspan=4><b>Czerwone kartki gospodarz:</b>&nbsp;<input size="73" type="text" name="gosp_czk"></td>
  51. </tr>
  52. <tr>
  53. <td align=right colspan=4><b>Czerwone kartki gość:</b>&nbsp;<input size="73" type="text" name="gosc_czk"></td>
  54. </tr>
  55. <tr>
  56. <td align=right colspan=4><b>Skład gospodarzy:</b>&nbsp;<input size="73" type="text" name="gosp_sklad"></td>
  57. </tr>
  58. <tr>
  59. <td align=right colspan=4><b>Skład gości:</b>&nbsp;<input size="73" type="text" name="gosc_sklad"></td>
  60. </tr>
  61. <tr>
  62. <td align=left colspan=2><b>Widownia:</b>&nbsp;<input size="25" type="text" name="widownia"></td>
  63. <td><input type="submit" value="Dodaj">&nbsp;&nbsp;<input type="reset" value="Wyczyść"></td>
  64. </tr>
  65. </form>
  66. </TABLE>
  67. </body>
  68. </html>


zapisz_mecz.php
  1. <?php 
  2. include('connection.php'); 
  3.  
  4. if (isset($nazwa_sezonu)) 
  5.  { 
  6. $query = sql(&#092;"INSERT INTO jez_mecz_dane SET nr_kolejki='$nr_kolejki', id_sezonu='$id_sezonu', data='$data', gosp='$gosp', gosp_br='$gosp_br', gosc='$gosc', gosc_br='$gosc_br', gosp_strzelcy='$gosp_strzelcy', gosc_strzelcy='$gosc_strzelcy', gosp_zk='$gosp_zk', gosc_zk='$gosc_zk', gosp_czk='$gosp_czk', gosc_czk='$gosc_czk', gosp_sklad='$gosp_sklad', gosc_sklad='$gosc_sklad', widownia='$widownia';\"); 
  7.  } 
  8. echo &#092;"Dane zapisane<BR>\";
  9. echo &#092;"<A HREF=\"dodaj_mecz.php\">Dodaj kolejny mecz</A><BR>\";
  10. echo &#092;"<A HREF=\"pokaz_mecze.php\">Pokaż mecze</A>\";
  11. ?>


I teraz nie moge dodac meczu do bazy, chociaz nie dostaje komunikatu o bledzie. Wyzej sa tabele do ktorych chce dodawac dane. Bede wdzieczny za podpowiedz co jest zle. A moze macie jakis lepszy pomysl na formularz, moze mozna to zrobic lepiej (na 100% mozna, bo jestem amatorem tongue.gif ), jesli macie czas i dobre checi to czekam ba jakies wskazowki.


--------------------
Jeziorak-Iława.pl
www.jeziorak-ilawa.pl
krystian@jeziorak-ilawa.pl
Go to the top of the page
+Quote Post
dawhol
post 28.07.2006, 10:44:48
Post #9





Grupa: Zarejestrowani
Postów: 256
Pomógł: 0
Dołączył: 19.07.2006
Skąd: Ostrów Wielkopolski

Ostrzeżenie: (0%)
-----


albo mi sie wydaje albo ta instrukcja warunkowa jest zle skonstrułowana.

Po pierwsze mysql_query() potrzbujesz jak juz winksmiley.jpg a po drugei zapytanie daj w zmiennej tak jak masz moze byc ale usun sql( i na koncu ) nie jest ci to potrzebne

a instrukcje napisz najlepiej tak
  1. <?php
  2. if(mysql_query($query)) 
  3. {
  4. echo ('Dane zapisane');
  5. echo '<A HREF="dodaj_mecz.php">Dodaj kolejny mecz</A><BR>';
  6. echo '<A HREF="pokaz_mecze.php">Pokaż mecze</A>';
  7. } else
  8. ?>


wtedy poznasz ew, błedy a zapytyanie napewno zostanie wyonane

zapytanie niech bedzie tak zapisane w zmiennej
  1. <?php
  2. $query = "INSERT INTO jez_mecz_dane SET nr_kolejki='$nr_kolejki', id_sezonu='$id_sezonu', data='$data', gosp='$gosp', gosp_br='$gosp_br', gosc='$gosc', gosc_br='$gosc_br', gosp_strzelcy='$gosp_strzelcy', gosc_strzelcy='$gosc_strzelcy', gosp_zk='$gosp_zk', gosc_zk='$gosc_zk', gosp_czk='$gosp_czk', gosc_czk='$gosc_czk', gosp_sklad='$gosp_sklad', gosc_sklad='$gosc_sklad', widownia='$widownia'";
  3. ?>


lub ew, tak:
  1. <?php
  2. $query = "INSERT INTO jez_mecz_dane (nr_kolejki, id_sezonu, data, ....) VALUES ('$nr_kolejki', '$id_sezonu', '$data', ....)'";
  3. ?>


ps. bez tego / który daje mi sie pomiedzy ' " na koncu zapytania smile.gif

Ten post edytował dawhol 28.07.2006, 10:51:57


--------------------
Go to the top of the page
+Quote Post
nospor
post 28.07.2006, 10:53:56
Post #10





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




@dawhol czy myslisz, ze po roku od ostatniego posta, autorowi problemu bedą jeszcze potrzebne te informacje? (pytanie retoryczne)


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
dawhol
post 28.07.2006, 10:56:15
Post #11





Grupa: Zarejestrowani
Postów: 256
Pomógł: 0
Dołączył: 19.07.2006
Skąd: Ostrów Wielkopolski

Ostrzeżenie: (0%)
-----


heheh nie zwróciłem uwagi smile.gif


--------------------
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 14.06.2025 - 08:32