Post
#1
|
|
|
Grupa: Zarejestrowani Postów: 50 Pomógł: 0 Dołączył: 11.12.2006 Ostrzeżenie: (0%)
|
Witam,
mam problem, może nie jest to trudne ale nie potrafię sobie wymyślić dobrego sposobu na rozwiązanie następującego problemu. Posiadam bazę danych a w niej przykładową tabelę, wymyśloną na potrzeby przykładu:
oczywiście na pole "id_item" autoincrement, z jasnych przyczyn nie chcę zmieniać wartości tego pola więc wymyśliłem aby dodać dodatkowe pole w tabeli dzięki któremu będzie można zmieniać kolejność wyświetlania się poszczególnych rekordów pole np. "show_item" autoincrement (choć nie koniecznie)
Rekordy z tej tabeli mają się domyślnie wyświetlać -ostatnio dodanych 6 (no chyba że zostanie zmieniona kolejność po przez modyfikację pola "show_item") więc:
(w zapytaniu warunek WHERE "show_item" <> 0, ponieważ usuwanie wybranych rekordów odbywa się na zasadzie ustawienia pola "show_item" = 0) czyli, zakładając ze tabela "tabela_items" posiada 30 rekordów (od Coś_1 do Coś_30) w chwili obecnej: 1. Coś_30 2. Coś_29 3. Coś_28 4. Coś_27 5. Coś_26 6. Coś_25 wszystko wydaje mi się proste gdy chcę zmienić kolejność wybranego rekordu i ustawić go na pierwszej pozycji (ostatnich 6-ciu dodanych), zwiększając po prostu pole "show_item" o +1 od największego. Moje pytanie jak to rozwiązać jeśli chciał bym dokonać zmiany wybranych rekordów np. (IMG:style_emoticons/default/questionmark.gif) (IMG:style_emoticons/default/questionmark.gif) z 1. Coś_30 2. Coś_29 3. Coś_28 4. Coś_27 5. Coś_26 6. Coś_25 na 1. Coś_30 2. Coś_20 3. Coś_28 4. Coś_27 5. Coś_14 6. Coś_25 (nie wiem czy to coś zmienia ale interesuje mnie zmiana kolejności 6-ciu wyświetlanych elementów, domyślnie 6-ciu ostatnio dodanych) Ten post edytował perhydrol 30.09.2009, 10:12:05 |
|
|
|
![]() |
Post
#2
|
|
|
Grupa: Zarejestrowani Postów: 898 Pomógł: 80 Dołączył: 31.05.2008 Ostrzeżenie: (20%)
|
Ale to kolego jakąś kryterie musisz sobie ustalać na jakiej zasadzie i poczym chcesz to wybierać, ja nie mam pojęcia skąd i dlaczego wzięło Ci się te Coś_20 zamiast 29.
|
|
|
|
Post
#3
|
|
|
Grupa: Zarejestrowani Postów: 50 Pomógł: 0 Dołączył: 11.12.2006 Ostrzeżenie: (0%)
|
już mowie i oczywiście poprawie pierwszy post,
zakładając ze tabela "tabela_items" posiada 30 rekordów (od Coś_1 do Coś_30) w chwili obecnej, i chcemy zmienić kolejność rekordów zgodnie z zapytaniem:
chce dokonac zmiany z Coś_30 Coś_29 Coś_28 Coś_27 Coś_26 Coś_25 modyfikując pole "show_item" na przedstawiona poniżej kolejność Coś_30 Coś_20 Coś_28 Coś_27 Coś_14 Coś_25 Ten post edytował perhydrol 30.09.2009, 10:24:46 |
|
|
|
Post
#4
|
|
|
Grupa: Zarejestrowani Postów: 518 Pomógł: 18 Dołączył: 21.07.2008 Ostrzeżenie: (0%)
|
No i w czym problem (IMG:style_emoticons/default/questionmark.gif) ?
Na warunkach ktore zostaly przedstawione wystarczy pamietac aby show_item posiadaly odpowiednie wartosci. Np. jesli jest jakis panel admina wprowadzajacy te produkty to mozna zrobic tak: klikasz na edycje produktu baza dostaje pytanie
w odpowiedzi zwraca ci 6 produktow z ich id i wartosciami show_item. Znajac juz ostatnie 6 wartosci show_item mozesz je wpisac do dowolnych produktow recznie dzieki czemu masz pewnosc ze tylko one sie wyswietla. Ten post edytował elmozaur 30.09.2009, 10:47:05 |
|
|
|
Post
#5
|
|
|
Grupa: Zarejestrowani Postów: 50 Pomógł: 0 Dołączył: 11.12.2006 Ostrzeżenie: (0%)
|
hmmm, w dalszym ciągu nie jest to rozwiązanie jakie mnie zadowala ponieważ:
posiadając przykładowo 30-rekordów w tabeli "tabela_items", prezentowane jest ostatnie 6 rekordów jakie zostało dodane, nazwijmy to NOWOŚCI (tak dla przykładu) czyli: Coś_30 Coś_29 Coś_28 Coś_27 Coś_26 Coś_25 (powiedzmy że w panelu posiadamy listę wszystkich produktów, i funkcję pozwalająca nam przypisać pozycję na której ma się znaleźć wybrany produkt) wchodząc do panelu administratora, chcę dokonać zmiany aby (nazwijmy to produkt) Coś_25 znalazł się na pierwszej pozycji wyświetlanej czyli: Coś_25 Coś_30 Coś_29 Coś_28 Coś_27 Coś_26 (jak dla mnie prosta czynność ponieważ zmieniamy wartość rekordu Coś_25, pola "show_item" na maksymalną + 1 [wartość rekordu Coś_25, pola show_item = 25, zastępujemy wartością 31] ) OK następnie, co jednak w przypadku gdy chcemy wyciągnąć rekord powiedzmy Coś_9, i ustawić na trzecią pozycję wyświetlaną czyli: Coś_25 Coś_30 Coś_9 Coś_29 Coś_28 Coś_27 jaką wartość przypisać pola "show_item", rekordu Coś_9 (IMG:style_emoticons/default/questionmark.gif) Co się stanie z wartosciami rekordów Coś_25, Coś_30 (IMG:style_emoticons/default/questionmark.gif) Nie wiem czy nie wprowadza was w błąd sposób jaki ja zaprezentowałem z tym wprowadzeniem pola "show_item", może należy to w inny sposób rozwiązać, tylko jaki. ============================================================== kolejny problem jaki napotkałem, to w jaki sposób auto numerować rekord "show_item", gdy już istnieje rekord wykorzystujący "autoincrement" czyli "id_item" czy aby przypisać w "show_item" sensowną wartość będąca czymś w rodzaju auto numeracji, to po dodaniu produktu, UPDATE rekordu i przypisanie takiej samej wartości "show_item" co "id_item" (IMG:style_emoticons/default/questionmark.gif) Ten post edytował perhydrol 30.09.2009, 12:37:29 |
|
|
|
Post
#6
|
|
|
Grupa: Zarejestrowani Postów: 518 Pomógł: 18 Dołączył: 21.07.2008 Ostrzeżenie: (0%)
|
banalnie proste. rozwiazan jest chyba 100 np:
w adminie zrob zakladke o nazwie np top 6; po wejsciu w ta zakladke pokazuje sie formularz i 6 list rozwijanych jedna pod druga; listy te zawieraja spis wszystkich "produktow" np: i tak 6 razy a na dole strony submit. I teraz formularz ktory odbiera te dane bierze w kolejnosci ID produktu w bazie w kolumnie pozycji wstawia odpowiednio od 1-6 a w pozostalych '0'; Przy 30 czy 300 rekordach w bazie to szybka robota... |
|
|
|
Post
#7
|
|
|
Grupa: Zarejestrowani Postów: 50 Pomógł: 0 Dołączył: 11.12.2006 Ostrzeżenie: (0%)
|
to naprawdę proste i myślę że w miarę skuteczne rozwiązanie, pomijając dwa przypadki:
1. Domyślnie ma się tworzyć automatycznie, lista ostatnio 6-ciu dodanych produktów, ALE z uwzględnieniem dokonanych przez nas zmian, a przykład jaki opisujesz wydaje mi się że będzie działał jedynie wtedy gdy za każdym razem ustawimy tą kolejność ręcznie, bądź pokażemy 6 pozycji ostatnio dodanych. [ mam rację, czy też coś przeoczyłem ? ] 2. Wspominałem że gdy ustawimy wartość pola wybranego rekordu na "0", produkt będzie traktowany jako usunięty (choć z tym jestem sobie w stanie poradzić) |
|
|
|
Post
#8
|
|
|
Grupa: Zarejestrowani Postów: 518 Pomógł: 18 Dołączył: 21.07.2008 Ostrzeżenie: (0%)
|
masz racje.
w takiej sytuacji albo automat albo recznie z listy. Bo nawet jak napiszesz funkcje ktora uklada recznie to dodanie nowego produktu uruchomi automat i "zniszczy" reczne ustawienia. Tu chyba sam problem wybory jest zly bo albo cos robi sie z automatu albop recznie. chyba ze ktos ma inny pomysl no chyba ze zrobisz taka funkcje ze: jesli wybierzesz jakis produkt z listy na pewnej pozycji to informacja o pozycji zostanie zapisana w dodatkowej kolumnie np "blok" i przy listowaniu z bazy trzeba bedzie najpierw sprawdzic ile jest pozycji zablokowanych. Nastepnie 6-liczba zablokowanych da ci ilosc ktora trzeba pobrac z bazy (np4) wyciagasz z bazy 4 pozycje i wiesz ze np 1 jest zablokowana (bo recznie wybrales) wiec pierwszy wynik wskoczy na 2 pozycje i tak dalej... to powinno zadzialac ale musisz dostawic 1 dodatkowa kolumne |
|
|
|
Post
#9
|
|
|
Grupa: Zarejestrowani Postów: 50 Pomógł: 0 Dołączył: 11.12.2006 Ostrzeżenie: (0%)
|
... no chyba ze zrobisz taka funkcje ze: jesli wybierzesz jakis produkt z listy na pewnej pozycji to informacja o pozycji zostanie zapisana w dodatkowej kolumnie np "blok" i przy listowaniu z bazy trzeba bedzie najpierw sprawdzic ile jest pozycji zablokowanych. Nastepnie 6-liczba zablokowanych da ci ilosc ktora trzeba pobrac z bazy (np4) wyciagasz z bazy 4 pozycje i wiesz ze np 1 jest zablokowana (bo recznie wybrales) wiec pierwszy wynik wskoczy na 2 pozycje i tak dalej... to powinno zadzialac ale musisz dostawic 1 dodatkowa kolumne Czy ten sposób z dodatkową kolumną będzie działał po dodaniu nowego produktu, czy nowo dodany produkt trafi na pierwszą pozycję?? Pytam bo nie jestem pewien czy dobrze zrozumiałem, myślałem nad tym rozwiązaniem i wydaje mi się że aby zrealizować coś takiego będzie potrzebna na 100% druga kolumna. Pozdrawiam.. Ten post edytował perhydrol 1.10.2009, 15:21:53 |
|
|
|
![]() ![]() |
|
Aktualny czas: 24.12.2025 - 10:01 |