Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Usuniecie luki
Forum PHP.pl > Forum > PHP
Domin
Cześć...

Mam malutki problem, oróż chodzi o zmianę wartości jednej komórki we wszystkich rekordach. Tzn...
Mam kilka rekordów z od. wartosciami wg których jest sortowanie np.

- cos 1
- cos1 2
- cos3 3
- cos4 4
- cos5 5

i teraz usuwam rekord "cos3" wiec w wartosciach mam lukę bo zostaja mi wartosci 1,2, ,4,5...
Jak teraz zrobić aby wartosci zostały zmniejszone o 1, czyli żeby została zlikwidowana dziura... Chcę aby wartości wygladały tak 1,2,3,4

Jak to zrobić...

Czytałem coś o wyciągnięciu do tablicy, ale nie wiem jak się do tego przybrać:/
MatheW
Aż tak konieczne jest, ażeby id były po kolei? Przecież i tak możesz sobie za pomocą skryptu, zapytania obliczyć który to jest rekord z kolei.
Domin
Gdyby nie było konieczne to bym tego nie robił... a sortowanie jest wg wartości, a wszystko jest zrobione tak że mogę zmienić kolejność, jedna wartosć jest dodawana druga odejmowana, a kiedy ejst dziura poprostu wychodzą dwie wartości z tymi samymi id :/
NuLL
OFFTOPIC ( na przyszlosc ) - klucza podstawowego dla rekordu sie nie zmienia.
Jarod
Cytat(Domin @ 6.06.2006, 18:52 ) *
Gdyby nie było konieczne to bym tego nie robił... a sortowanie jest wg wartości, a wszystko jest zrobione tak że mogę zmienić kolejność, jedna wartosć jest dodawana druga odejmowana, a kiedy ejst dziura poprostu wychodzą dwie wartości z tymi samymi id :/


Poprawić skrypt/bazę?

Null ma racje.
Domin
nie chodzi mi o id rekordów, tylko o wartosci w kolejnej wierszu tabeli...
Podam przykład...

id nazwa pozycja
1 cos 1
2 cos2 3
3 cos 3 2

sortowanie odbywa się wg komórki "pozycja" , a więc jak usunięmy rekord o id 3 to w liczbach sortowanych będzie 1 i 3 a teraz trzeba zrobić tak żeby 3 zmienić na 2 i kolejne rekordy też...
Jarod
Cytat(Domin @ 6.06.2006, 19:41 ) *
nie chodzi mi o id rekordów, tylko o wartosci w kolejnej wierszu tabeli...
Podam przykład...

id nazwa pozycja
1 cos 1
2 cos2 3
3 cos 3 2

sortowanie odbywa się wg komórki "pozycja" , a więc jak usunięmy rekord o id 3 to w liczbach sortowanych będzie 1 i 3 a teraz trzeba zrobić tak żeby 3 zmienić na 2 i kolejne rekordy też...



Tylko podaj sensowny powód tej zamiany? Bo ja nie rozumiem dlaczego chcesz to zroić.
babejsza
Najprościej (chodź na pewno nie najoptymalniej), będzie:

  1. <?
  2.  
  3. $query = mysql_query("SELECT * FROM tabela");
  4. $i=0;
  5. while($rekord = mysql_fetch_array($query)){
  6.  mysql_query("UPDATE tabela SET twoja_kolumna = '".$i++." WHERE id='$rekord[0]'");
  7. }
  8.  
  9. ?>
Domin
Cytat(J4r0d @ 6.06.2006, 21:56 ) *
Tylko podaj sensowny powód tej zamiany? Bo ja nie rozumiem dlaczego chcesz to zroić.


Przeczytaj wyżej..., bo jest mi to potrzebne przy sortowaniu i przy zmianie kolejności!!!

Ale to nie może być wg dowolnej kolejności, tylkowg takiej jaka była ustalona, poprostu trzeba tylko zmienić niektóe liczby o 1 w dół!
SongoQ
Dziwie sie ze meczycie dalej ten temat. Autor postu wyraznie napisal ze nie chodzi o id.
Jesli masz mozliwosc stosowania triggerow to bardzo latwo takie cos osiagnac. Jesli nie ma to juz musisz kombinowac.

Najblizsze luki da sie samym zapytaniem wylanic. Ale nie zalatwi Ci wszystkiego.

  1. SELECT * FROM tabela t1, tabela t2 LEFT JOIN t1.pole = t2.pole + 1 WHERE t2.pole IS NULL


To wyciagnie pojedyncze luki odnnosnie przesowania bedzie trudno. Jesli zalezy Ci na zapytaniu tylko to musisz troche pokombinowac. Kiedys mialem podobny problem z przyznawaniem adresow ip.
Domin
Zrobiłem to w bardzo prosty sposób, zamieszczam jak by ktos potzrebował...

  1. <?php
  2. if (isset($_GET['del']) and is_numeric($_GET['kat']) and is_numeric($_GET['poz']) ){
  3.  
  4.  $query = "SELECT * FROM tabelka WHERE kat_id = {$_GET['kat']} and kat_order > {$_GET['poz']}";
  5.  $result = mysql_query($query);
  6.  $row = mysql_num_rows($result);
  7.  if ($row > 0) {
  8.  $query = "UPDATE tabelka SET kat_order = kat_order-1 WHERE kat_id = {$_GET['kat']} and kat_order > {$_GET['poz']}";
  9.  $result = mysql_query($query);
  10.  }
  11. ?>
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.