Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [plany] rotator banerów
Forum PHP.pl > Forum > PHP
Athlan
Hmmm może przedstawię sytuację (nawet wypadaloby tongue.gif )

Chciałbym zrobić sobie już powiedzmy "niebadziewny" rotator bannerów, ktory ma nastepującą strukturę bazy danych:
  1. --
  2. -- Struktura tabeli dla `vbanner_banners`
  3. --
  4.  
  5. CREATE TABLE `vbanner_banners` (
  6. `Vbanners_banner_id` int(11) NOT NULL AUTO_INCREMENT,
  7. `Vbanners_banner_width` int(4) NOT NULL,
  8. `Vbanners_banner_height` int(3) NOT NULL,
  9. `Vbanners_banner_name` text NOT NULL,
  10. `Vbanners_banner_hits` int(10) NOT NULL,
  11. `Vbanners_banner_displays` int(10) NOT NULL,
  12. `Vbanners_banner_limit_hits` int(10) NOT NULL,
  13. `Vbanners_banner_limit_displays` int(10) NOT NULL,
  14. `Vbanners_banner_limit_time` int(11) NOT NULL,
  15. `Vbanners_banner_category` int(5) NOT NULL,
  16. PRIMARY KEY (`Vbanners_banner_id`),
  17. KEY `Vbanners_banners_category` (`Vbanners_banner_category`)
  18. );
  19.  
  20. -- --------------------------------------------------------
  21.  
  22. --
  23. -- Struktura tabeli dla `vbanner_categories`
  24. --
  25.  
  26. CREATE TABLE `vbanner_categories` (
  27. `Vbanners_category_id` int(11) NOT NULL AUTO_INCREMENT,
  28. `Vbanners_category_name` text NOT NULL,
  29. `Vbanners_category_description` text NOT NULL,
  30. PRIMARY KEY (`Vbanners_category_id`)
  31. );


Każdy banner wyświetli się przy określonych warunkach:
- jezeli jego czas ważności nie upłynął
- jeżeli nie przekroczył swojego limitu wyświetleń
- jeżeli nie przekroczył swojego limitu kilknięć (uderzeń)
- jeżeli jest w danej kategorii na odpowiedniej stronie smile.gif

chodzi mi głównie o to, aby dopasować banner do kilku kategorii. Jak postawie 0, banner nalezy do wszystkich kategorii, ale problem jest w tym, aby umieścuić go np w 2 albo nawet 10 kategoriach.

I pytanie jest nastepujące: W jaki sposób zapisać jego ID kategorii do których należy?

p.s pole kategorii w bannerach możnaby zapisać jako TEXT i wartość mialaby oddzielone przecinkami klategorie, np 4,7,8,10,45, ale trudno byłoby zaznaczać te dane z bazy danych sad.gif np chcę zaznaczyć wszystkie bannery z kategorii 7 i każdy rekord musiałby być analozowany, wartość pola kategorii explodowana przecinkiem i dopeiro po przejściu warunku banner zostałby dopuszczony do wyświetlenia... jest na to inny haczyk?
Kayne
Możesz stworzyć oddzielną tabelę:

ID_BANNERA | ID_KATEGORII

I tam dodawać. ID_BANNER może (i powinno) się powtarzać.
Athlan
Hmmm... pomysł nie jest zły... LEFT JOIN wszystko załatwi, a są jeszcze inne rozwiązania?
kossa
hej,
możesz to rozwiązać tworząc dwie tabele, jedną z banerami, a drugą gdzie będziesz miał ID baneru i id kategorii, np:

id | id_baneru | id_kategorii

1 | 3 | 4
1 | 2 | 4
1 | 7 | 2
1 | 3 | 5
1 | 2 | 7

itd.

Skrypt najpierw pobiera id kategorii, sprawdza jaki ma wyświetlić baner, a następnie z tabeli z banerami sprawdza czy baner spelnia warunki aby jeszcze go wyświetlić, czy kliki są jeszcze możliwe itd. Jeśli ok to baner będzie wyświetlony, jeśli nie to coś co już sobie wymyślisz :-)

Pozdrawiam,
Łukasz

p.s.
oo, Kayne zaproponował to samo kiedy pisałem odpowiedź :-) Pozdro!
cicik
Relacja pomiedzy kategoriami i abnerami to N do N wiec zasady sztuki nakazuja utworzyc trzecia tabele (tak jak koledzy wspomnieli) z id_banera i id_kategorii ale bez dodatkowego klucza glownego. kluczem glownym powinny byc te dwa pola razem.

create table banery_kategorie (id_banera int, id_kategorii int, primary key(id_banera, id_kategorii)) + ewentualne wiezy referencyjne.
Athlan
@cicik - nie powtarzaj sie... powiedzimi mi 2 razy nie trzeba pisać ponownie:)

btw: primary na id_kategorii nie może być... a co jak wiele bannerów nalezy do tej samej kategorii? sama nazwa mówi: ROTATOR smile.gif
cicik
Cytat(Athlan @ 28.07.2006, 09:28 ) *
@cicik - nie powtarzaj sie... powiedzimi mi 2 razy nie trzeba pisać ponownie:)

btw: primary na id_kategorii nie może być... a co jak wiele bannerów nalezy do tej samej kategorii? sama nazwa mówi: ROTATOR smile.gif


Wlasnie dlatego napisalem osobnego posta zeby wyjasnic ze NIE NALEZY robic dodatkowego klucza glownego dla tabeli laczacej banery i kategorie. Klucz glowny ma byc dwukolumnowy.
Tak jak napisalem primary key(id_banera, id_kategorii) wtedy kluczem glownym jest kombinacja id banera i id kategorii. Wtedy dziala to dokladnie tak jak ma dzialac. Czyli kazdy abner moze byc w wielu kategoriach i kazda kategoria moze zqwierac dowolna liczbe banerow. Jednoczesnie wyskoczy blad jezeli bedziesz chcial dodac dwa razy ten sam baner do jednej kategorii co chroni spojnosc bazy.
Athlan
aha... a wiesz moze jak zrobić taki multiprimarykey przez phpmyadmin? bo u mnie się nie da albo czegoś nie widzę smile.gif

pozdro smile.gif

____ EDIT:

  1. CREATE TABLE `zlacz_banery_2` (
  2. `id_bannera` int( 11 ) NOT NULL ,
  3. `id_kategorii` int( 11 ) NOT NULL ,
  4. PRIMARY KEY ( `id_kategorii` , `id_bannera` )
  5. )


w phpmyadmie tego nie ma ale poradziłem sobie robiąc to ręcznie
kossa
Cicik'a uwaga jest istotna w związku z zaprojektowaniem Twojej (Athlan) bazy danych.

Łukasz
cicik
Cytat(Athlan @ 28.07.2006, 09:46 ) *
w phpmyadmie tego nie ma ale poradziłem sobie robiąc to ręcznie


w phpmyadminie zaznaczasz opcję "primary key" przy odpowiednich polach
Athlan
tak... znalazlem. Jakby ktos szukal to to jest w preferencjach tabeli przy zaznaczeniu poczczególnych pól jako checkboxy dać PODSTAWOWY (lub primary albo taki kuczyk tongue.gif) - przyciski pod zestawieniem pol tabeli

pozdro smile.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.