jak zmieniać pozycję elementu w bazie danych za pomocą php ??

0

Witam potrzebuję ustawić pozycję elementu za pomocą przesuwania w górę dół elementu w bazie danych. Nie wiem jak to się robi np :

menu:
marchewka
truskawka
groszek

Po przesunięciu elementu groszek o jedną pozycję w górę ma być coś takiego

menu:
marchewka
groszek
truskawka

to jest przykład. Teraz jak to zrobić nie mam pojęcia proszę o rady mam
mam taką taką zdefiniowaną tabelę w mysql:

CREATE  TABLE IF NOT EXISTS `mydb`.`sklep` (
  `lp` INT NOT NULL DEFAULT 0 ,
  `nazwa` VARCHAR(80) CHARACTER SET 'utf8' COLLATE 'utf8_polish_ci' NULL ,
  `htlm` VARCHAR(80) CHARACTER SET 'utf8' COLLATE 'utf8_polish_ci' NULL ,
  `meta` VARCHAR(255) NULL ,
  PRIMARY KEY (`lp`) )
ENGINE = InnoDB;

co mam dodać to działałao na jak na przykładzie i jak mam zrobić do tego pytanie
pytanie aby pobrać wszystkie po lp wiem jak to zrobić poniżej przykład , a chce to zmieniać

SELECT * FROM wysylka ORDER BY lp ASC

0
 UPDATE [nazwa_tabeli] SET lp=[nowe_lp] WHERE nazwa = [zmieniona_nazwa]

Dla obu elementów trzeba zaktualizować. Poza tym zakładam, że nazwa jest unikalna? Tzn sprawdzana przed dodaniem nowego elementu? Jeżeli nie ma być unikalna to po kluczu musisz sprawdzać.

0

Nie chodzi mi o zmianę nazwy tylko o kolejność wyświetlania w menu po tak pisałem po daniu w górę lub w dół ma się znajdować w odpowiedniej pozycji
Jeszcze raz przykład

1 Marchewka
2 Ogórek
3 Winogrono

Przez link który ma być w php ze strony admina ustawiam że Winogrono ma być przed ogórkiem lub nawet przed marchewką nie wiem jak to zrobić
ma po operacji ma się wyświetlać takie menu np

1 Marchewka
2 Winogrono
3 Ogórek

Nie wiem jak to zrobić czy mam wczytywać wszystko do jakieś tablicy i potem ją odpowiednio sortować czy dodać jakieś pola do mojej bazy danych. Wyżej jest przykład i za pomocą jakiegoś zapytania zmienić to ??

zapytanie UPDATE [nazwa_tabeli] SET lp=[nowe_lp] WHERE nazwa = nazwa gdzie lp jest kluczem i jest nadawane automatycznie nie wiem czy da się tak jeżeli tak czy
dając lp 3 i jak wymusić ze dane w lp 3 mają być widoczne w lp 4 itd itd .. czyli jak zamienić pozycjami .

0

Ale nigdzie nie napisałem, że masz zmieniać nazwę :) Dla przykładu zrobiłem w zapytaniu porównywanie po nazwie bo id nie widziałem w Twojej tabeli.

Tak jak w podanym przeze mnie przykładzie - zmieniasz lp i wykonujesz zapytanie takie jak sam napisałeś. Czego w tym nie rozumiesz?

EDIT: Poza tym masz młyn. Dałeś skrypt tworzenia innej tabeli, a z innej wyciągasz dane.

EIDT2 bo nie doczytałem Twojego posta:

Jeżeli lp jest kluczem to zrób inne pole, które będzie wskazywało kolejność i po nim sortuj wynik zapytania.

0

Rozumiem iż mam utworzyć dodatkowe pole np sort typu init . Dobra ale na przykład zmienię w pozycji lp 3 Ogórek na górę lp 3 zostanie a sort zmienię na 2 to w lp 2 musiałbym zmienić Winogrona na sort 3 i tu mam problem jak to zrobić albo jak to jest robione przez zapytanie czy trzeba wszystko wczytywać do tablicy i potem zmieniać odpowiednie wartości bo nie wiem jak. Przepraszam że zapomniałem poprawić nazwę tabeli w zapytaniu

0

Przechowujesz sobie wartości ID (lp) i w momencie zmiany aktualizujesz w bazie tak jak napisałeś. Musisz wiedzieć jaki element ma jakie lp, żebyś mógł zmieniać. Jak to rozwiążesz to już Twoja sprawa ale sposobów jest kilka.

0

Mogę prosić o przykład. Klucz Lp przechowuję po stronie admina metodą GET ukrywając to w pliku .htaccess np /admin/sklep/edit_1.html gdzie 1 to $_GET['lp'] = 1
i zmieniam poleceniem
'UPDATE sklep SET tu co zmieniam WHERE lp='.$_GET['lp']

0

Zmiana pozycji w menu, z poziomu php lub przesuwanie pozycji menu o to mi chodzi jak to zrobić , co muszę dodać do tabeli i jakie zapytania proszę o przykład .

0
INSERT INTO sklep(lp, nazwa) Values(13, 'alabama');
UPDATE sklep SET lp=lp+1 WHERE lp>13;

Dodałem element 13 i wszystkie późniejsze przesunąłem w dół

0

Rozumiem ale mam już elementy takie kal Marchewka id= 1 i Kapusta id= 2
Elementy w menu wyglądają tak
1 Marchewka
2 Kapusta
teraz wchodzę w admina klikam zieloną strzałkę koło kapusty i chcę aby kapusta była wyświetlona pierwsza
1 Kapusta
2 Marchewka
albo nie podoba mi się to znów klikam zieloną strzałkę koło kapusty i zmieniam położenia i wyświetla mi się
1 Marchewka
2 Kapusta
itd nie ma się dotyczyć tylko dwóch elementów w menu, chciałbym mieć 10 i na przykład 10 element przesunąć o dwa elementy itp.
W joomla oferuje coś takiego. Chciałbym coś takiego zrobić gdzie lp jest kluczem co mam dodać do bazy danych i jak mam wykonać zapytania
a przykład powyższy mi się przyda dzięki

0

Dodaj sobie pole określające porządek sortowania (jakąś liczbę, najlepiej ze znakiem) i wyświetlając elementy wykonuj ORDER BY pozycja (czy jak to nazwałeś). A do przesuwania w górę i w dół użyj zmiany wartości pola pozycja o 1 albo -1 w zależności co kliknął użytkownik.

0
$p = $this->db->wczytaj_dane('SELECT * from '.$tabela.' where poz='.$this->d[1]) ;
			   $q = $this->db->wczytaj_dane('SELECT * from '.$tabela.' where poz='.($this->d[1]-1)) ;
			   $this->db->operacje('UPDATE '.$tabela.' SET poz = '.$q['poz'].' where lp='.$p['lp']) ;
			   $this->db->operacje('UPDATE '.$tabela.' SET poz = '.$p['poz'].' where lp='.$q['lp']) ;

Dodałem jedną pozycję do tabeli i działa . Temat uważam za zaknięty

0

$LpUp=???;
$LpPrev=$LpUp-1;
$LpSum=$LpUp+$LpPrev;

update sklep set lp=$LpSum-lp where lp in ($LpUp,$LpPrev)

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