![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 8 Pomógł: 0 Dołączył: 10.11.2013 Ostrzeżenie: (0%) ![]() ![]() |
Witam,
o dziwo nie potrafię znaleźć rozwiązania swojego problemu w internecie, dlatego będę również wdzięczny za rzucenie kilku keywordów (lub wskazówek) zamiast gotowego rozwiązania ![]() Moja tabela "katerogie" zawiera (dla maksymalnego uproszczenia) następujące pola id - identyfikujące daną kategorię name - wiadomo order - w celu określenia "customowej" kolejności kategorii W Panelu Administracyjnym mam wylistowane wszystkie kategorie, posortowane według pola order. W każdym wierszu z kategorią znajdują się też 2 strzałki (do prostego przemieszczania kategorii w górę/w dół). Moje pytania są następujące: - jak najprościej (np. bez używania funkcji MAX() dodać nową kategorię o "najstarszej" kolejności ? - jak usunąć kategorię tak, by nie została luka (np. order po usunięciu kilku kategorii wygląda tak: 0, 7, 8, 9, 13) - jak najprościej (przy pomocy wyżej wymienionych "strzałek") zamienić 2 kategorie miejscami (zakładam, że order ma klucz UNIQUE) ? - linijkę wyżej zamieniam miejscami dwie kategorie, które leżą obok siebie. jak się ma sytuacja w przypadku, gdy chcę przesunąć kategorię np. z pozycji 2 na zajętą pozycję 10, tak aby reszta się ładnie poukładała ? - czy istnieje lepszy sposób na zaprojektowanie tego niż wyżej przedstawiony ? Dodam, że istnieje także druga tabela z podkategoriami, w której każdy element ma przypisanego rodzica i swoją kolejność w obrębie danej nadkategorii. Pozdrawiam i z góry dziękuję za wszelką pomoc, Nivelis Ten post edytował Nivelis 20.01.2014, 11:31:12 |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 1 421 Pomógł: 310 Dołączył: 18.04.2012 Ostrzeżenie: (0%) ![]() ![]() |
Moja tabela "katerogie" zawiera (dla maksymalnego uproszczenia) następujące pola id - identyfikujące daną kategorię name - wiadomo order - w celu określenia "customowej" kolejności kategorii Nie nadawaj nazw, które są słowami kluczowymi w SQL. Moje pytania są następujące: - jak najprościej (np. bez używania funkcji MAX() dodać nową kategorię o "najstarszej" kolejności ? ORDER BY `order` DESC LIMIT 1 ![]() - jak usunąć kategorię tak, by nie została luka (np. order po usunięciu kilku kategorii wygląda tak: 0, 7, 8, 9, 13) Po co? - jak najprościej (przy pomocy wyżej wymienionych "strzałek") zamienić 2 kategorie miejscami (zakładam, że order ma klucz UNIQUE) ? UPDATE katerogie SET `order`=6-`order` WHERE `order` IN (2,4) -- 6 bierze się z sumy 2 + 4 - linijkę wyżej zamieniam miejscami dwie kategorie, które leżą obok siebie. jak się ma sytuacja w przypadku, gdy chcę przesunąć kategorię np. z pozycji 2 na zajętą pozycję 10, tak aby reszta się ładnie poukładała ? Po co? - czy istnieje lepszy sposób na zaprojektowanie tego niż wyżej przedstawiony ? Być może - nie znam. Dodam, że istnieje także druga tabela z podkategoriami, w której każdy element ma przypisanego rodzica i swoją kolejność w obrębie danej nadkategorii. Błąd. wrzuć wszystko do jednej tabeli z dodatkowym polem (parentId). Wtedy UNIQUE na parentId, order |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 8 Pomógł: 0 Dołączył: 10.11.2013 Ostrzeżenie: (0%) ![]() ![]() |
Cytat Nie nadawaj nazw, które są słowami kluczowymi w SQL. To nie są moje nazwy, podałem je w uproszczeniu, aby wyjaśnić problem. Cytat ORDER BY `order` DESC LIMIT 1 Dodać, nie pobrać. Nadal nie wiem jak zrobić to bez dodatkowego SELECT'a, który zwróci mi największy numerek porządkowy. Cytat Po co? < drugie ![]() Drag & drop w wybrane miejsce. Cytat Błąd. wrzuć wszystko do jednej tabeli z dodatkowym polem (parentId). Wtedy UNIQUE na parentId, order I jak niby miałaby działać w tym przypadku relacja wiele do jednego ? |
|
|
![]()
Post
#4
|
|
![]() Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
Cytat Nadal nie wiem jak zrobić to bez dodatkowego SELECT'a, który zwróci mi największy numerek porządkowy. No raczej sie nie obejdzie.... przeciez musisz wiedziec jaki numer jest najwiekszy. Wrozka ci nie powieCytat I jak niby miałaby działać w tym przypadku relacja wiele do jednego ? To co ty masz za zystem kategorii, ze jedna podkategoria moze nalezec do wielu nadkategorii?
-------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 8 Pomógł: 0 Dołączył: 10.11.2013 Ostrzeżenie: (0%) ![]() ![]() |
Cytat To co ty masz za zystem kategorii, ze jedna podkategoria moze nalezec do wielu nadkategorii? No faktycznie nie może, mój błąd ![]() |
|
|
![]()
Post
#6
|
|
![]() Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
No ale tak sie robi, ze kategorie leża w jednej tabeli. Nie ma najmniejszego sensu tworzyc dwoch tabel, ktore przechowują te same info/strukture.
Pocztaj o strukturach drzewiastych. Jest tego cała masa, np. drzewka IP -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 8 Pomógł: 0 Dołączył: 10.11.2013 Ostrzeżenie: (0%) ![]() ![]() |
Pozwolę sobie kontynuować wątek, gdyż mam wątpliwości.
Moja struktura teraz wygląda tak: - identyfikator - identyfikator rodzica - nazwa - liczba porządkowa W tym momencie dane się mieszają, kategoria od subkategorii jest rozróżniana jedynie tym, że identyfikator rodzica w pierwszym przypadku ma wartość NULL. Dane się mieszają, trzeba je dodatkowo rozdzielać, żeby wykonać jakąś operację przykładowo tylko na kategoriach głównych i jest ogólny chaos. Na pewno powinno to tak być? Jaki jest sens upychania tego do jednej tabeli nawet jeśli dane są do siebie podobne? Drzewo sięga tylko jednego potomka, nie będzie bardziej zagnieżdżone (subkategoria nie może mieć kolejnych subkategorii). Byłbym wdzięczny jakby ktoś jeszcze się wypowiedział ![]() |
|
|
![]()
Post
#8
|
|
![]() Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
Chaos....? dodanie
WHERE identyfikator_rodzica = null nazywasz CHAOSEM?? To taki zart, tak? -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 8 Pomógł: 0 Dołączył: 10.11.2013 Ostrzeżenie: (0%) ![]() ![]() |
Raczej wymieszanie dwóch różnych danych w jednej tabeli bez większego celu. Sam identyfikator powinien wskazywać na konkretny obiekt a w tym przypadku potrzebujemy aż dwóch własności, żeby stwierdzić czym ten obiekt w ogóle jest. Nie chodzi o to, że taka struktura uniemożliwia pracę czy utrudnia ją w znaczącym stopniu, po prostu z mojego punktu widzenia sprawia wrażenie nieestetycznej, takiej, że da się to zrobić "lepiej".
Co innego gdyby faktycznie drzewo miałoby mieć x potomków - ale tak nie jest. Ten post edytował Nivelis 20.01.2014, 18:15:56 |
|
|
![]()
Post
#10
|
|
![]() Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
Za to tworzenie kolejnej zbednej tabeli, ktora trzyma te same dane juz dla CIebie nie jest bezsensu? Interesujace.....
Tak sie robi. Ale jak nie chcesz, to nikt ci nie zabroni robic i nawet 15 dodatkowych tabel. -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
![]()
Post
#11
|
|
Grupa: Zarejestrowani Postów: 8 Pomógł: 0 Dołączył: 10.11.2013 Ostrzeżenie: (0%) ![]() ![]() |
Danych o innym przeznaczeniu. Pobranie konkretnych danych z konkretnej tabeli wydaje się być szybsze od przeszukiwania jednej, składującej wszystko i segregowania ich za każdym razem gdy się chce na nich wykonać operację. Nie potrzebuję 15 tabel - potrzebne mi jedynie dwie co podkreśliłem pisząc o tym, że drzewo nie będzie zagnieżdżone do nie wiadomo ilu elementów.
Ale chyba podziękuję za dyskusję z Tobą bo z niewiadomego mi powodu od samego początku prezentujesz ofensywny ton wypowiedzi - nikt nie każe Ci odpowiadać w moim temacie i jeśli denerwuje Cie on w jakikolwiek sposób to ja to rozumiem ale w tym przypadku nie rób łaski tylko go pomiń ![]() Mimo wszystko dzięki za pomoc. |
|
|
![]()
Post
#12
|
|
![]() Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
Od pewnego momentu zadajesz pytania niejako na moje odpowiedzi, wiec kontynuuje rozmowe z Toba.
Zas twoj wywod o niepomaganiu jak sie nie chce, dziala rowniez w drugą strone. Skoro wiesz lepiej i nie chcesz pomocy - nie pytaj ![]() Wyjasniam ci jak to sie robi. Nie ma sensu tworzyc dwoch identycznych tabel, co ty proponujesz. Tu sie robi jedna tabele i nie ma zadnego chaosu, nie ma zadnego poslizgu z pobieraniem danych i nie ma w ogole z tym zadnego problemu. Zakladasz odpowiednie indeksy i wszystko smiga pieknie. Poza tym ile ty bedziesz mial tych kategorii? 100? 1000? To zadna liczba dla bazy danych. Nawet jakbys ich mial 1000000 to rowniez to by nie byl zaden problem trzymac je w jednej tabeli. Ale chyba podziękuję za dyskusję z Tobą bo z niewiadomego mi powodu od samego początku prezentujesz ton wypowiedzi - pytam ale i tak wiem lepiej ![]() ps: i wytlumacz mi prosze, ktore moje posty mają ofensywny ton wypowiedzi, bo niezmiernie mnie to interesuje. -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
![]() ![]() |
![]() |
Aktualny czas: 22.08.2025 - 03:53 |