Autor Zpráva
hexcross
Profil
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
SELECT * FROM bannery WHERE id='".$_GET['aktualni_id_stranky']."'
Takhle nějak?
Tori
Profil
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
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
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
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) ");
  

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: