"korygowanie" pomocniczego index-u

0

Cześć.
Mam taki problem. Mam w tabeli index pomocniczy służący do sortowania według niego wierszy znajdujących się w bazie. Index ten chcę również w niektórych miejscach wyświetlać więc powinien się zaczynać od 1 i zwiększać się o 1.
Problem jest taki, że czasami chcę modyfikować dane w tabeli i zmieniać ten index -> np. był 5 teraz będzie 10.
No i pojawia się problem, bo brakuje index-u o numerze 5.
Dlatego też chcę, aby w bazie danych przy zmianie czegokolwiek, na wszelki wypadek index-y ustawiały się od najmniejszego do największego i zwiększały się o 1.
Problem jest z odpowiednim zapytaniem - jak ono powinno wyglądać?

Chciałem zrobić coś w tym stylu:
Dla pierwszego indeksu

$query = "
UPDATE `main menu` SET `help index` = 0 WHERE `help index` = MIN(`help index`)
";

Niestety pojawi się błąd

A następnie w pętli - dla reszty:

for($i=1; i<$count_rows;$i++)
{
$query = "
SELECT MIN(`help index`) FROM `main menu` WHERE `help index` > $i
";
$result = mysql_query($query) or die (mysql_error());
$row = mysql_fetch_assoc($result);
if($row['help index']>$i)
{
$query = "
UPDATE `main menu` SET `help index` = $i WHERE `help index` = ".$row['help index'].")
";
mysql_query($query) or die (mysql_error());
}	
}

}

Czy może ktoś mi pomóc z błędem wynikającym z pierwszego zapytania, który brzmi: Invalid use of group function
oraz ocenić dalszą część kodu - ewentualnie zaproponować bardziej optymalne/czytelne rozwiązanie? :)

Z góry dziękuję za pomoc!

0
  1. numer kolejny wyświetla się całkiem inaczej! NIGDY nie należy do tego celu tworzyć dodatkowej kolumny! A jak user będzie chciał posortować np. w drugą stronę to mu lp też pokażesz odwrócone?
  2. takie zabawianie się w przenumerowywanie nigdy nie wróży nic dobrego. Jeśli masz taki problem to w 99,9% przypadków wskazuje to na błąd w projekcie

Napisz jaka baza, do czego ci ten numer przy wyświetlaniu i na jakiej zasadzie jest nadawany przy sortowaniu

0

Chodzi o to, że chcę zrobić sobie swojego bloga. Naturalnie na blogu będę pisał różne artykuły, do których będę odnośniki w menu.
Chodzi o to, by odnośniki w menu były według kolejności przeze mnie wskazanej. Może być tak, że wstawię jakiś artykuł a miesiąc później będę chciał by nowszy artykuł był przed tym dodanym wcześniej i na odwrót. Dlatego potrzebuję pomocniczego index/id, który będzie służył jedynie do wskazania kolejności wyświetlanej treści.
Niestety problem się komplikuje przy modyfikowaniu tego index-u -> jak chcę go ustawić na jakiś późniejszy numer to zostaje mi puste pole co nie wygląda zbyt estetycznie (ten index wykorzystuję również do ponumerowania swoich artykułów).

0

no to startujesz z czystym licznikiem albo z listą już ładnie ponumerowaną. Teraz należy tak napisać system pozycjonowania wpisów, aby załatwiał przesuwanie bez potrzeby przenumerowywania CAŁEJ listy, tzn. system ma wiedzieć, które LP przesuwasz w które miejsce i cała operacja powinna się zamykać w najgorszym razie w dwóch prostych operacjach
a) zmiana pozycji - dwa update
b) usunięcie pozycji - update i delete
c) dodanie pozycji - update i insert
i w update będzie albo lp = lp - 1 albo lp = lp + 1 bo albo przesuwasz wpisy o jeden do góry albo w dół.

Co do zapytania z pierwszego postu to być może zadziała

UPDATE `main menu` SET `help index` = 0 WHERE `help index` = (SELECT MIN(`help index`) from `main menu)

ale śmiem wątpić bo próbujesz zmienić wartość w tabeli, którą jednocześnie odpytujesz o tą samą wartość

0

ok, dzięki wielki - może jakoś przez to przebrnę :)
Tak ogólnie to chyba wiem jak to zrobić, ale ten sposób jest dość pracochłonny -> chciałem iść na skróty :P
pozdrawiam i powodzenia

0

zapewne brakuje referencji, która by zmieniała Ci identyfikator po modyfikacji rzeczonego. Powinieneś zmodyfikować bazę danych i albo:
-dodać referencje do zmienianych rekordów (index),
-skorzystać z wyzwalaczy (triggerów),
-skorzystać z własnej opracowanej funkcji lub procedury w systemie bazy danych, której używasz;

  • wykorzystać bespośredni dostęp do DB poprzez cursor, ale na to raczej decydują się nieliczni.

1 użytkowników online, w tym zalogowanych: 0, gości: 1