Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MySQL]jak zamienić id w 2 wierszach
Forum PHP.pl > Forum > Przedszkole
neo1986kk
Witam, mam problem z zamiana 2 wierszy, mianowicie zmienia mi się wszystko oprócz id. Zrobiłem dla tego celu osobne zapytanie ale nic się nie dzieje.
  1. $zapytanie1 = "UPDATE `sloter` SET `id`='$id1+1' where `seq`='id1'";
  2. $idzapytania1 = mysql_query($zapytanie1);
  3. if ($zapytanie1){ echo "ZROBIONE <br>"; };
  4.  
  5.  
  6. $zapytanie2 = "UPDATE `sloter` SET `id`='$id-1' where `seq`='$id'";
  7. $idzapytania2 = mysql_query($zapytanie2);
  8. if ($zapytanie2){ echo "ZROBIONE <br>"; };


Czy coś tu jest nie tak?
nospor
'$id1+1' - rozrozniaj tekst od wartosci. to co zapisales to tekst a nie wartosc
powiinno byc: $id1+1
neo1986kk
Niestety to nie jest w tym problem. Bo bez znaczników ' też nie działa, poprostu zamienia tylko jeden element, jeśli miałem wiersz np.
1 a
2 b
3 c
4 d
5 e

to po zamianie 3 z 4 jest tak:

1 a
2 b
4 d
4 c
5 e

a ja chce zeby id było zawsze po kolei.
nospor
Cytat
Niestety to nie jest w tym problem
Problem wlasnie byl miedzy innymi w tym. I masz go poprawic.
Masz tez mase innych bledow:

nie:`seq`='id1'
a: `seq`=$id1

nie: `seq`='$id'
a: `seq`=$id

Jak to poprawisz to pokaz kod jeszcze raz. kod ma zawierac juz poprawki

poza tym nie powinienes do sortowania uzywac pola ID tylko oddzielnego pola. Teraz przy zmianie pol sasiednich mozesz miec maly klops
thek
Taaaa... I jeszcze powiedz, że masz na id ustawiony klucz primary autoincrement... Zgadłem? Wiesz co to powoduje czy nie wiesz o czym mówię? Bo jeśli masz tak ustawione to cud, że Ci pozwoliło na zamianę 3 na 4 już choćby raz. Primary zabrania stosować w kolumnie dwóch identycznych wartości w różnych wierszach. W takim wypadku należy więc lecieć ze zmianą nie od przodu bo Ci wywali zapytanie gdyż w jednym momencie pojawią się dwa wiersze z identyczną wartością. W takie sytuacji modyfikujesz parametr autoincrement tablicy zwiększając go o tyle o ile przesuwasz, a numery posuwając się od ostatniego ku pierwszemu, bo nigdy wtedy nie nastąpi zduplikowanie indeksu. Czyli przesuwasz wszystko o 4 w górę to autoincrement zwiększasz o 4 a rekordy lecąc od tyłu też o 4 robiąc update na tej kolumnie. Tak jak opisałeś, czyli idąc od najmniejszego można by zrobić gdybyś zmniejszał id, bo wtedy po odjęciu nie nastąpi duplikacja indeksu. Ale trochę myślenia perspektywicznego jak widać Ci brakuje i nie przewidujesz jak to wpłynie na bazę.
neo1986kk
  1. <?
  2.  
  3.  
  4. $seqa=$_GET['seq'];
  5. $seqa1=$seqa-1;
  6. $seqa2=$seqa+1;
  7.  
  8.  
  9.  
  10. $zapytanie5 = "SELECT * FROM sloter where `seq`='$seqa1'";
  11. $idzapytania5 = mysql_query($zapytanie5);
  12.  
  13. while ($wiersz1 = mysql_fetch_row($idzapytania5))
  14.  
  15. {
  16. $pocz=$wiersz1[1];//data rozpoczęcia
  17. $s1=$wiersz1[8];//numer sekwencji
  18. $czasp1=$wiersz1[9];
  19.  
  20. }
  21.  
  22.  
  23.  
  24. $zapytanie1 = "SELECT * FROM sloter where `seq`='$seqa'";
  25. $idzapytania1 = mysql_query($zapytanie1);
  26.  
  27. while ($wiersz1 = mysql_fetch_row($idzapytania1))
  28. {
  29. $s2=$wiersz1[8];//numer sekwnecji
  30. $pb=$wiersz1[1];//data rozpoczęcia
  31. $y=$wiersz1[5];//data zakończenia
  32. $czasp2=$wiersz1[9];
  33.  
  34.  
  35. }
  36.  
  37.  
  38.  
  39.  
  40.  
  41. $zapytanie11 = "SELECT * FROM sloter where `seq`='$seqa2'";
  42. $idzapytania11 = mysql_query($zapytanie11);
  43.  
  44. while ($wiersz1 = mysql_fetch_row($idzapytania11))
  45. {
  46.  
  47. $s3=$wiersz1[8];//numer sekwencji
  48. $f=$wiersz1[5];//data zakończenia
  49. }
  50.  
  51.  
  52. $zapytanie77 = "UPDATE `sloter` SET `datar`='$pocz' where `seq`='$seqa'";
  53. $idzapytania77 = mysql_query($zapytanie77);
  54. if ($zapytanie77){ echo "ZROBIONE <br>"; };
  55.  
  56.  
  57. $datazakonczeniaid=date('Y-m-d H:i',strtotime('+1 hours',strtotime($pocz)));
  58.  
  59.  
  60.  
  61.  
  62.  
  63. $zapytanie771 = "UPDATE `sloter` SET `koniec`='$datazakonczeniaid' where `seq`='$seqa'";
  64. $idzapytania771 = mysql_query($zapytanie771);
  65. if ($zapytanie771){ echo "ZROBIONE <br>"; };
  66.  
  67.  
  68. $zapytanie88 = "UPDATE `sloter` SET `datar`='$datazakonczeniaid' where `seq`='$seqa1'";
  69. $idzapytania88 = mysql_query($zapytanie88);
  70. if ($zapytanie88){ echo "ZROBIONE DRUGIE<br>"; };
  71.  
  72. $datazakonczeniaid2=date('Y-m-d H:i',strtotime('+1 hours',strtotime($datazakonczeniaid)));
  73. echo $datazakonczeniaid;
  74. echo $datazakonczeniaid2;
  75.  
  76. $zapytanie881 = "UPDATE `sloter` SET `koniec`='$datazakonczeniaid2' where `seq`='$seqa1'";
  77. $idzapytania881 = mysql_query($zapytanie881);
  78. if ($zapytanie881){ echo "ZROBIONE DRUGIE<br>"; };
  79.  
  80.  
  81.  
  82. $zapytanie888 = "UPDATE `sloter` SET `seq`=$s2 where `seq`=$seqa1";
  83. $idzapytania888 = mysql_query($zapytanie888);
  84. if ($zapytanie888){ echo "ZROBIONE <br>"; };
  85.  
  86.  
  87. $zapytanie8888 = "UPDATE `sloter` SET `seq`=$s1 where `seq`=$seqa";
  88. $idzapytania8888 = mysql_query($zapytanie8888);
  89. if ($zapytanie8888){ echo "ZROBIONE <br>"; };
  90.  


  1. $zapytanie888 = "UPDATE `sloter` SET `seq`='3' where `seq`=$seqa1";
  2. $idzapytania888 = mysql_query($zapytanie888);
  3. if ($zapytanie888){ echo "ZROBIONE <br>"; };
  4.  
  5.  
  6. $zapytanie8888 = "UPDATE `sloter` SET `seq`='2' where `seq`=$seqa";
  7. $idzapytania8888 = mysql_query($zapytanie8888);
  8. if ($zapytanie8888){ echo "ZROBIONE <br>"; };

nawet w ten sposób nie działa.
thek
Czy Ty właściwie czytasz co piszą ludzie? Masz primary ustawiony na tę kolumnę seq czy nie? jeśli to Twój klucz główny w tabeli to sobie możesz tak długo zmieniać ją dopóki nie trafisz na identyczny już istniejący, bo wtedy Ci zapytanie się wysypie. Po to jest primary by temu zapobiegać. On ma być unikalny dla całej tabeli i modyfikowanie go "na hura", bez myślenia co się stanie, przynosi dla "freestyle'erów" nie grzeszących myśleniem, niespodzianki winksmiley.jpg
neo1986kk
Ustawienia tabeli:
[PHP]
  1. mysql_query("CREATE TABLE `sloter` (`id` integer NOT NULL auto_increment, `datar` char(50) NOT NULL, `klient` char(50) NOT NULL, `kod` char(50) NOT NULL,`ilosc` char(50) NOT NULL, `koniec` char(50) NOT NULL, `nastepna` char(50) NOT NULL, `status` char(50) NOT NULL, `seq` integer NOT NULL ,`czasprd` char(50) NOT NULL, PRIMARY KEY(`id`))");
  2. if ($result){ echo "Udalo sie stworzyc tabelke!<br>"; };
[/list][PHP]

A może zmienie z integer na char? EDIT: no niestety nie dziala

  1. $zapytanie888 = "UPDATE `sloter` SET `seq`='wiekszy' where `seq`=$seqa1";
  2. $idzapytania888 = mysql_query($zapytanie888);
  3. if ($zapytanie888){ echo "ZROBIONE <br>"; };
  4.  
  5.  
  6. $zapytanie44 = "UPDATE `sloter` SET `seq`='mniejszy' where `seq`=$seqa";
  7. $idzapytania44 = mysql_query($zapytanie44);
  8. if ($zapytanie44){ echo "ZROBIONE <br>"; };
  9.  
  10.  
  11. $zapytanie888 = "UPDATE `sloter` SET `seq`='$s2' where `seq`='wiekszy'";
  12. $idzapytania888 = mysql_query($zapytanie888);
  13. if ($zapytanie888){ echo "ZROBIONE <br>"; };
  14.  
  15.  
  16. $zapytanie44 = "UPDATE `sloter` SET `seq`='$s1' where `seq`='mniejszy'";
  17. $idzapytania44 = mysql_query($zapytanie44);
  18. if ($zapytanie44){ echo "ZROBIONE <br>"; };


Działa - może komuś się przyda.
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.