[MySQL][PHP] Pobieranie wybranych danych z mysql |
[MySQL][PHP] Pobieranie wybranych danych z mysql |
6.09.2011, 15:21:06
Post
#1
|
|
Grupa: Zarejestrowani Postów: 304 Pomógł: 1 Dołączył: 12.01.2009 Skąd: Kanapa Ostrzeżenie: (0%) |
Witam
Mam tabele w mysql mniejwiecej: _____________________ |Kategorie||Podkategorie| ------------------------------ Jakas | Jakas 2| Jakas 3| Jakas | podkategoria1 Jakas | podkategoria2 Jakas2 | podkategoria3 ------------------------------- I teraz moje pytanie jest takie jak wyświetlic tylko te kategorie które sie nie powtarzają ? (mają pusta podkategorie) i jak później wyświetlić podkategorie dla 'Jakas' ? Macie jakiś pomysł jak to zrobić ? Ew. jak to zrobić inaczej ? |
|
|
6.09.2011, 15:49:53
Post
#2
|
|
Grupa: Zarejestrowani Postów: 202 Pomógł: 36 Dołączył: 10.06.2011 Skąd: Dokąd Ostrzeżenie: (0%) |
|
|
|
6.09.2011, 15:57:21
Post
#3
|
|
Grupa: Zarejestrowani Postów: 248 Pomógł: 55 Dołączył: 1.06.2010 Skąd: mam to wiedzieć? Ostrzeżenie: (0%) |
select distinct
-------------------- Łatwo jest być odważnym za murami własnego zamku.
|
|
|
6.09.2011, 16:00:51
Post
#4
|
|
Grupa: Zarejestrowani Postów: 1 447 Pomógł: 191 Dołączył: 26.03.2008 Ostrzeżenie: (0%) |
jeszcze inaczej -------------------- :)
|
|
|
6.09.2011, 21:03:44
Post
#5
|
|
Grupa: Zarejestrowani Postów: 304 Pomógł: 1 Dołączył: 12.01.2009 Skąd: Kanapa Ostrzeżenie: (0%) |
Dobra to załatwiłem podkategorie:
a kategorie tak:
Niewiem czy o to wam chodziło ale dało potrzebny efekt, ew. jak można to jeszcze uproscić to prosze pisać No i mam jeszcze jeden problem, jak wyświetlić to w formie drzewa ? Bo wymyśliłem coś takiego ale to wyświetla mi ze 20 rozwijanych pól.. a ja bym chciał żeby to było tak: Jakas | podkategoria1 podkategoria2 Jakas 2| podkategoria3 Jakas 3|
pomożecie |
|
|
7.09.2011, 09:37:22
Post
#6
|
|
Grupa: Zarejestrowani Postów: 248 Pomógł: 55 Dołączył: 1.06.2010 Skąd: mam to wiedzieć? Ostrzeżenie: (0%) |
1-sze co to zapytaj się siebie co chcesz osiągnąć...
Przykład: Chcę menu, gdzie wyświetlam główne kategorie, a pod tymi kategoriami drop down dla podkategorii, gdzie podkategorie mogą być zawarte w więcej niż 1-nej kategorii. Przede wszystkim zmień strukturę swojej bazy. Nie może być tak, że coś głównego powtarza Ci się - to powinien być klucz, albo unikalna wartość. 1 tabela - kategorie: id | nazwa 1 | Kat1 2 | Kat2 3 | Kat3 2 tabela - podkategorie: lp | id (foreign key to id z tabeli 1-szej) | nazwa 1 | 1 | Podkat1 2 | 1 | Podkat2 3 | 2 | Podkat3 Dzięki temu masz relacje wiele do jednego i możesz podkategorie wyświetlić pod kilkoma kategoriami... Dość prosto jest to ogarnąć więc nie będę tłumaczył jak z tego zrobić menu czy co tam chcesz... Ale wracając do relacji wiele do jednego Np: Akcesoria PC -myszki -drukarki Kontrolery gier -myszki -pady Lub jak chcesz wszystko w 1 tabeli: Kategorie to unikalne nazwy lub też integer etc. i w kolejnej tabeli ich nazwy id | Kat | podkategorie 1 | Kat1 | 1; 2; 3; 2 | Kat2 | 1; 6; 8; i tabela z podkategoriami (tu mogą być też urle, status (aby włączyć, wyłączyć etc.)) id | podkat 1 | abc 2 | bbb 3 | xxx 6 | asd 8 | ppp teraz jak zrobić z tego menu czy jakieś tam drzewko? Pobieramy obie tabele, używamy explode dla podkategorii z 1-szej tabeli sql(dzięki temu mamy osobną tabelę z podkategoriami)... Czyli mamy tak: tabela a: 1 => array('Kat1' => '1;2;3;') 2 => array('Kat2' => '1;6;8;') tabela b: 1 => abc itd. Jest użyję foreach... Dzięki czemu mamy coś takiego, że dla każdego elementu tablicy robimy tak: wyświetlam sobie Kat1 i teraz rtrim - choć raczej nie trzeba i później rozbijam np. używając explode. Array ze stringu (to jest 1;2;3;) to 0->1, 1->2, 2->3 i teraz dla 1, 2, 3 - wyświetlam ich nazwy z 2-giej tabeli sql tj. abc, bbb, xxx. Dla Kat 2 będzie to abc, asd, ppp I co dostaję na koniec? Ka1 -abc -bbb -xxx Kat2 -abc -asd -ppp Ta... To chyba tak - oczywiście można to rozwijać jak napisałem o status, albo redukcję vat dodajesz etc. To akurat dla sklepów. Wszystko zależy od naszej wyobraźnie. Nie wiem czy to jest dobrze, ale działa i pewnie ktoś się z moim sposobem nie zgodzi =] Ten post edytował ixpack 7.09.2011, 09:40:21 -------------------- Łatwo jest być odważnym za murami własnego zamku.
|
|
|
7.09.2011, 15:33:40
Post
#7
|
|
Grupa: Zarejestrowani Postów: 304 Pomógł: 1 Dołączył: 12.01.2009 Skąd: Kanapa Ostrzeżenie: (0%) |
Dobra to teraz pytanie z serii dziwnych... Jak identyfkujesz to wszystko ?
Bo w tym wypadku Kat1 ma taki sam id jak abc... ? Za każdym razem przesyłasz 2 zmienne ? |
|
|
8.09.2011, 09:12:28
Post
#8
|
|
Grupa: Zarejestrowani Postów: 248 Pomógł: 55 Dołączył: 1.06.2010 Skąd: mam to wiedzieć? Ostrzeżenie: (0%) |
1 | Kat1 | 1; 2; 3;
2 | Kat2 | 1; 6; 8; id | podkat 1 | abc 2 | bbb 3 | xxx 6 | asd 8 | ppp 2 Tablele co nie? To to samo co: 1 | Kat1 | abc;bbb;xxx W sumie nic nie stoi na przeszkodzie, aby dać to w powyższej formie jedynie to pamięć jaką używasz. Lepiej chyba nawet dać to tak, że kategorie w 1-nej tabeli, a podkategorie w 2-giej - gdzie dodatkowo będą miały kolumnę z id kategorii głównej (dla identyfikacji) - parent id. Teraz Jak byś chciał zrobić 3-stopniowe drzewo, to sytuacja już się zmienia... Jeszcze bardziej się komplikuje jak chciałbyś przypisać 2 podkategorie do różnych kategorii etc. Pobierając te 2 tabele wyżej mamy w pamięci 2 tablice: $x = array('0' => array('1', 'Kat1', '1;2;3'), '1' => array('2', 'Kat2', '1;6;8')) Z tego mogę wygenerować 2 linki lub 2 elementy ul, gdzie jakiś refId będzie id Kategorii - to przekieruje nas do strony o id 1 - odpowiedzialną za stronę zbiorczą dla Kat1 Teraz dla każdego ul chcemy wygenerować podkategorie - linki. Do tego używamy np. explode. Czyli dla linku zbiorczego mamy id z $x[0][0], a tablice podkategori wyciągamy z $x[0][2], nazwa Kategori to $x[0][1]. Ok. mam tablicę, którą wykonałem z $x[0][2] -> powiedzmy $y = array('0'=>'1', '1'=>'2', '2'=>'3') (bo $y = explode(';', '1;2;3') tak nam wygeneruje), a ponieważ wcześniej zessałem z bazy nazwy podkategorii - to mam też nazwy dla ich id. Nie wiem jak to dogłębniej wytłumaczyć - nie piszę ludziom kodów, staram się dać "wędkę" Muszę zaznaczyć kurde, że to jest tylko 1 z wielu wielu możliwych rozwiązań! Można np. Dać tabelę, gdzie masz coś takiego - i co jest o wiele łatwiejsze: id | nazwa | id_rodzica 1 | aaa | 2 - to będzie pokazane pod abc 2 | abc | 0 - główny rodzic, to będzie pokazane od razu 3 | bbb | 1 - to będzie pokazane pod aaa 4 | bcd | 0 - główny rodzic... Tylko pytanie jak zrobić, aby kilka podkategorii miało wielu rodziców i żeby bazy były optymalne? Ile koderów tyle rozwiązań. Np moje rozwiązanie dla wielu menu (oczywiście mam trochę bardziej rozbudowane etc. a mój mini cms tym zarządza - coś musi ;D Bo po co ręcznie coś doklepywać?) Tworzę kilka tabel: 1) Linki link_id | nazwa 1 | aaa 2 | bbb 3 | ccc 4 | ddd 5 | eee 6 | fff 2) Menusy: menu_id | nazwa 1 | menu główne 2 | menu lewe 3) Drzewko: lp | menu_id | rodzic | link_id | sila 1 | 1 | 0 | 1 | 0 2 | 1 | 0 | 2 | 0 3 | 1 | 1 | 3 | 0 4 | 1 | 3 | 4 | 0 5 | 1 | 1 | 5 | 0 6 | 1 | 2 | 5 | 0 7 | 1 | 2 | 6 | 0 8 | 2 | 1 | 5 | 0 9 | 2 | 2 | 6 | 0 Większość danych przechowywana jest wyżej, a nazwy, które często zmieniać się nie będą - powyżej. Teraz ja np. generuje sobie menu co jakiś czas lub gdy wyczerpie się ostatni produkt z asortymentu - dzięki temu w moim sklepie nie ma czegoś takiego jak "ups sory kurde, ale nie ma produktu w tej kategorii etc." Jak wygenerować menu? a) zależnie od tego gdzie menu i które wyświetlamy - pobieramy odpowiednie dane (albo wszystko od razu i mamy w pamięci już wszystkie dane) np. dla menu_id - 1 -> główne menu... sprawdzamy rodzica - jeżeli 0, to pokazujemy - sortujemy wg. siły c) jeżeli już pokazaliśmy rodzica, to dla niego pokazujemy wszystkie dzieci, które mają rodzica - 1, lub 2 (zauważ, że mamy 2-ch głównych rodziców: 1 i 2, bo w kolumnie rodzic jest 0, a 0 nie będzie użyte jako id linku więc możemy to użyć jako jakąś główną wytyczną) d) dla rodzica 1 - mamy linki: 3 i 5 e) dla rodzica 2 - mamy linki: 5 i 6 -> czyli wyświetlamy link 5 (czyli eee - nazwa) pod rodzicem 1 i 2. f) a co z linkiem id 4? Jego rodzic to link id 3, który jest pod rodzicem 1. Dlatego musimy dla każdego sublinku i sub sub itd. sprawdzić czy mamy dla niego dzieci Pokmiń, spróbuj coś takiego zrobić. Ja teraz mam swoje problemy (ajaxowa edycja usera, gdzie każdy mój user ma swoją bazę ze swoimi userami, których może edytować, a żeby było ciekawie każdy mój user ma dynamiczne tabele - pytania... Też edytowalne Ehh) jak coś to jutro rano kolejne wskazówki. Choć powinieneś już to zrobić. Chwila zastanowienia, rozrysuj to sobie na papierze i będzie dobrze. To się rozpisałem -------------------- Łatwo jest być odważnym za murami własnego zamku.
|
|
|
8.09.2011, 14:58:25
Post
#9
|
|
Grupa: Zarejestrowani Postów: 304 Pomógł: 1 Dołączył: 12.01.2009 Skąd: Kanapa Ostrzeżenie: (0%) |
W tak zwanym międzyczasie napisałem sobie coś takiego.. Niewiem czy to jest ok ale dostałem to co chciałem
A tablica wyglada tak: Ten post edytował Mayka 8.09.2011, 23:16:32 |
|
|
Wersja Lo-Fi | Aktualny czas: 6.06.2024 - 22:22 |