Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Przypisywanie kategorii
marcin.j
post 4.12.2011, 18:31:32
Post #1





Grupa: Zarejestrowani
Postów: 5
Pomógł: 0
Dołączył: 4.12.2011

Ostrzeżenie: (0%)
-----


Witajcie !

Natchnąłem się problem natury teoretycznej. A więc: załóżmy mam 3 grupy kategorii, w każdej grupie są 3 kategorie.
Cytat
Grupa 1
---Kategoria 1
---Kategoria 2
---Kategoria 3
Grupa 2
---Kategoria 4
---Kategoria 5
---Kategoria 6
Grupa 3
---Kategoria 7
---Kategoria 8
---Kategoria 9

Oraz jeden element który posiadałby kombinacje tych kategorii np.
Cytat
Element 1 kombinacja 1 (kategoria 1, kategoria 4, kategoria 7)
Element 1 kombinacja 2 (kategoria 1, kategoria 5, kategoria 7)
Element 1 kombinacja 3 (kategoria 1, kategoria 6, kategoria 7)
Element 1 kombinacja 4 (kategoria 1, kategoria 4, kategoria 8) itd...
na przykład: Zwierzę kombinacja 1 (rodzaj: kot, gatunek: syjamski, kolor: czarny)

I teraz kluczowy problem, jak sprawnie i szybko utworzyć sobie w PHP takie drzewko kombinacji ? Mam na myśli wszystkie możliwe kombinacje.

Go to the top of the page
+Quote Post
Kshyhoo
post 4.12.2011, 18:42:07
Post #2





Grupa: Opiekunowie
Postów: 3 855
Pomógł: 317
Dołączył: 4.01.2005
Skąd: że




Jeżeli grupy nie mają znaczenia, to wrzuć to do tablicy a potem coś w stylu:
  1. function kombinacje($dane) {
  2. $fragment = array();
  3. while($t = array_shift($dane)) {
  4. $fragment[] = $t;
  5. foreach(kombinacje($dane) as $wartosc) $fragment[] = "$t - $wartosc";
  6. }
  7. return $fragment;
  8. }
  9.  
  10. $k = kombinacje(array("Kategoria 1", "Kategoria 2", "Kategoria 3", "Kategoria 4", "Kategoria 5")); // tu właśnie Twoja tablica
  11.  
  12. foreach($k as $wartosc) echo "$wartosc<br />";


--------------------
Go to the top of the page
+Quote Post
marcin.j
post 4.12.2011, 18:45:49
Post #3





Grupa: Zarejestrowani
Postów: 5
Pomógł: 0
Dołączył: 4.12.2011

Ostrzeżenie: (0%)
-----


Dziękuje serdecznie smile.gif !
Niestety jednak grupy mają znaczenie. Uproszczając mam na myśli warianty produktu, np. kolor: biały, rozmiar: x.
Go to the top of the page
+Quote Post
Kshyhoo
post 4.12.2011, 18:49:18
Post #4





Grupa: Opiekunowie
Postów: 3 855
Pomógł: 317
Dołączył: 4.01.2005
Skąd: że




No tak, ale Twój przykład jest zbyt lakoniczny, by wyciągnąć wnioski potrzebne do napisania odpowiedniego skryptu. Piszesz wpierw o "Grupach" i przypisanych im "Kategoriach", a potem podajesz w przykładzie "Elementy" i "kombinacje". Podaj lepszy przykład.


--------------------
Go to the top of the page
+Quote Post
marcin.j
post 4.12.2011, 18:50:52
Post #5





Grupa: Zarejestrowani
Postów: 5
Pomógł: 0
Dołączył: 4.12.2011

Ostrzeżenie: (0%)
-----


Ok, więc załóżmy mamy produkt w sklepie, i ten produkt ma swoje atrybuty np. kolor: biały, czarny; wielkość: X, L; i teraz chcę zrobić wszystkie możliwe warianty produktu na podstawie n grup atrybutów.
Cytat
Produkt 1 kolor: biały; rozmiar: X;
Produkt 1 kolor: biały; rozmiar: L;
Produkt 1 kolor: czarny; rozmiar: X;
Produkt 1 kolor: czarny; rozmiar: L;


Mam nadzieję, że sprawa się lekko wyjaśniła.
Go to the top of the page
+Quote Post
Kshyhoo
post 4.12.2011, 18:52:55
Post #6





Grupa: Opiekunowie
Postów: 3 855
Pomógł: 317
Dołączył: 4.01.2005
Skąd: że




Dane masz w bazie?


--------------------
Go to the top of the page
+Quote Post
marcin.j
post 4.12.2011, 18:54:58
Post #7





Grupa: Zarejestrowani
Postów: 5
Pomógł: 0
Dołączył: 4.12.2011

Ostrzeżenie: (0%)
-----


Tak, baza podzielona jest na:
attributes_groups:
id_attributes_group

attributes:
id_attribute, id_attributes_group, ... inne dane takie jak nazwa itp.

Ten post edytował marcin.j 4.12.2011, 18:55:21
Go to the top of the page
+Quote Post
Kshyhoo
post 4.12.2011, 18:59:56
Post #8





Grupa: Opiekunowie
Postów: 3 855
Pomógł: 317
Dołączył: 4.01.2005
Skąd: że




Podam Ci przykład, a Ty kombinuj:
  1. SELECT a.dane AS dane1, b.dane AS dane2
  2. FROM produkty a INNER JOIN produkty b
  3. WHERE a.id<>b.id

Warunek WHERE możesz pominąć...

Ten post edytował Kshyhoo 4.12.2011, 19:00:51


--------------------
Go to the top of the page
+Quote Post
celbarowicz
post 4.12.2011, 20:05:29
Post #9





Grupa: Zarejestrowani
Postów: 253
Pomógł: 31
Dołączył: 30.03.2009
Skąd: Szczecin

Ostrzeżenie: (0%)
-----


Kurde w mordę, jak masz tylko trzy grupy skorzystaj z potrójnego selekta.
Go to the top of the page
+Quote Post
marcin.j
post 4.12.2011, 20:19:17
Post #10





Grupa: Zarejestrowani
Postów: 5
Pomógł: 0
Dołączył: 4.12.2011

Ostrzeżenie: (0%)
-----


A co ma SELECT do tego ? Nie nie mam 3 grup, mam N grup atrybutów i N atrybutów w tych grupach. Nie chodzi mi o pobranie atrybutów znając tylko id ich grupy, natomiast o wygenerowanie maksymalnej możliwej ilości kombinacji tych grup.

Przykład:

Cytat
Grupa kolor
{
czarny (id: 1),
biały (id: 2)
}
Grupa rozmiar
{
X (id: 3),
L (id: 4),
XL (id: 5)
}

wygenerowane kombinacje dla produktu o grupach atrybutów kolor i rozmiar:
Cytat
Kombinacja 1 (1, 3),
Kombinacja 2 (1, 4),
Kombinacja 3 (1, 5),
Kombinacja 4 (2, 3),
Kombinacja 5 (2, 4),
Kombinacja 6 (2, 5)


Ten post edytował marcin.j 4.12.2011, 20:20:12
Go to the top of the page
+Quote Post
celbarowicz
post 6.12.2011, 14:38:54
Post #11





Grupa: Zarejestrowani
Postów: 253
Pomógł: 31
Dołączył: 30.03.2009
Skąd: Szczecin

Ostrzeżenie: (0%)
-----


Można ze skończonej ilości tabel zawierających skończoną ilość elementów utworzyć(wypisać) wszystkie kombinacje.Wymaga to troszeczkę zaangażowania i pomyślunku. Info na PW.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 18.07.2025 - 02:16