Autor | Zpráva | ||
---|---|---|---|
hexcross Profil |
#1 · Zasláno: 19. 2. 2012, 19:50:35
zdravím,
je možné že to mám špatně navržené, možná ne, každopádně bych to rád vyřešil takto... Mám tabulku ve které ukládám bannery, které se mohou přiřadit k několika stránkám zároveň : [id] [page] v id je unikátní id banneru v page je uloženo id stránky(stránek) ve formátu 1;20;14;15... Potřebuji vybrat bannery které mají v page id aktuální stránky (teda např 20). Ooops ale tady jsem ztroskotal... Možná bych to vyřešil neefektivním a vnořenými WHILE apod. ale to myslím nebdue to pravé ořechové...
Jak to vyřešit? Díky. |
||
Someone Profil |
#2 · Zasláno: 19. 2. 2012, 19:55:28
SELECT * FROM bannery WHERE id='".$_GET['aktualni_id_stranky']."' |
||
Tori Profil |
#3 · Zasláno: 19. 2. 2012, 20:11:18
hexcross:
Vypadá to jako nevhodný návrh databáze, pro vztah M:N (tedy k jedné stránce je několik možných bannerů a zároveň jeden banner se může zobrazit na více stránkách) by to mělo vypadat spíš takhle: tabulka stranky (id, název, ...) tabulka bannery (id, url, ...) spojovací tabulka stranky_bannery (id_stranky, id_banneru) - sem všechny povolené kombinace. |
||
hexcross Profil |
#4 · Zasláno: 19. 2. 2012, 20:48:11
Someone:
Ne takhle to nejde, jelikož v $_GET['aktualni_id_stranky'] je hodnota např. 10 ale v databázi je ulozeno 10;20;30 (datový typ VARCHAR)
Tori: Souhlasím to mě taky napadlo, to by bylo řešení. Ale vyřešit takto jak to mám nelze? |
||
Tori Profil |
#5 · Zasláno: 19. 2. 2012, 20:55:05
Když jako oddělovač použijete čárku, můžete použít funkci FIND_IN_SET. Ale bude to pravděpodobně pomalejší než vazební tabulka a zkomplikujete si dotazy s použitím agregačních funkcí (kdybyste chtěl třeba seřadit bannery podle počtu stránek, na kterých se mohou zobrazit).
|
||
hexcross Profil |
#6 · Zasláno: 19. 2. 2012, 23:27:38
Tori:
Díky tori :) je to malej webík takže tu rychlost tady řešit nebudu... Pro jiný : $sql = mysql_query("SELECT id,name,url FROM `page-banners` WHERE FIND_IN_SET('".$get_page['id']."',page) "); |
||
Časová prodleva: 12 let
|
0