Domin
6.06.2006, 17:54:05
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
6.06.2006, 19:48:21
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
6.06.2006, 19:52:28
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 :/
OFFTOPIC ( na przyszlosc ) - klucza podstawowego dla rekordu sie nie zmienia.
Jarod
6.06.2006, 20:30:50
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
6.06.2006, 20:41:43
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
6.06.2006, 20:56:55
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
6.06.2006, 21:03:01
Najprościej (chodź na pewno nie najoptymalniej), będzie:
<?
$i=0;
mysql_query("UPDATE tabela SET twoja_kolumna = '".$i++." WHERE id='$rekord[0]'"); }
?>
Domin
6.06.2006, 21:18:59
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
6.06.2006, 23:32:54
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.
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
8.06.2006, 16:44:53
Zrobiłem to w bardzo prosty sposób, zamieszczam jak by ktos potzrebował...
<?php
$query = "SELECT * FROM tabelka WHERE kat_id = {$_GET['kat']} and kat_order > {$_GET['poz']}";
if ($row > 0) {
$query = "UPDATE tabelka SET kat_order = kat_order-1 WHERE kat_id = {$_GET['kat']} and kat_order > {$_GET['poz']}";
}
?>
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.