Autor Zpráva
blaaablaaa
Profil
Ahoj,

vytvářím systém pro registraci a správu účastníků různých konferencí, databáze tedy obsahuje v základu kontaktní údaje, ubytování účastníků (v jednotlivých dnech konference mohou být pokaždé v jiném hotelu i pokoji), dále jejich přednášky a ještě volitelné položky (doprovodný program apod.).

Mám teď udělat přehled účastníků, který má vypadat následovně:
Jmeno, Email, Ubytovani od - do, Pocet prednasek, Volitelne polozka 1, Volitelna polozka 2, ... Volitelna polozka N
Pepa, pepa@pepa.cz, 1.1.2000-5.1.2000, 3, ANO, NE, ... ANO

Takto vypisuji i více než 100 účastníků na jedné stránce, do toho přichází ještě filtrování (hotel, typ pokoje, chybějící příspěvek, volitelná položka, ...) a vyhledávání (jméno, číslo daňového dokladu, ...). Jak mám takový výpis řešit?
Napadá mě jen:
1. V základu si vytáhnout základní informace o účastníkovi a ke každému pak v PHP v cyklu doplnit ostatní položky (=pomalý výpis, ale jednodušší a rychlejší filtrování)
2. Pokusit se sestavit dotaz, který by vše vrátil v jednom výsledku (=použití spojení velkého množství tabulek, několika poddotazů = pomalé, nepřehledný dotaz)

Jak byste takovýto problém řešili vy?
Diky

Zjednodušený popis částí db:
acc_hotel: //seznam hotelu
ID, nazev, ...

acc_room: //seznam dostupnych pokoju
ID, ID_hotel, nazev, ...

acc_day: //seznam moznych dnu ubytovani
ID, ID_room, datum, ...

optionals: //seznam volitelnych polozek
ID, nazev

registrations //seznam registraci
ID, jmeno, ...

reg_acc: //objednani daneho pokoje na konkretni den
ID_reg, ID_acc_day, ...

reg_optionals: //propojeni s tbl optionals - urcuje, zda ma ucastnik danou volitelnou polozku
ID_reg, ID_optional, ...

texts: //prednasky ucastniku
ID, ID_reg, nazev, ...
BigBear
Profil
Já bych si asi vytvořil pohled a z něho pak data tahal. Ale záleží na tom, jak to pak bude rychlé - to chce vyzkoušet. Nedávno jsem takové spojení dělal na asi milion a pul zaznamech a je to docela pomalé i s jednoduchým filtrováním (ale pro mě to byla jediná možnost). Prostě záleží na tom. Vyzkoušel bych vytvořit pohled, protože práce nad ním je pak přehledná - navíc pro takové účely jsou pohledy určené, a vyzkoušel, jak to bude rychlé.
blaaablaaa
Profil
BigBear:
Díky za odpověď. Pohled by vyřešil bohužel jen tu jednodušší část, ale ve chvíli, kdy mám data ve vztahu m:n, by mi to ničemu nepomohlo (navíc je tam potřeba pokročilejší filtrování, např. účastník nemá v žádném dni konání konference daný hotel apod., které nevím jak jinak, než cyklem, řešit).

Ještě bych mohl vytvořit proceduru, která by ale měla stejný problém (tzn. v cyklu bych musel ověřovat jednotlivé filtry apod.)
Kcko
Profil
Zvolil bych složitější dotaz. Nepřehledné to být nemůže pokud budete správně odsazovat.
Pomalé to snad také nebude pokud dobře oindexujete tabulky.

Případně zvolit variantu složitějšího dotazu a poté série několika jednoduchých pro vytvoření rejstříků.

Tj. 1/ Dotaz na data o uživateli a základní věci
2/ plus kde se registruje, co si registruje ty už nemusí být součástí prvního Selectu.
blaaablaaa
Profil
Kcko:
U složitějšího dotazu mi jde především o to, že nedokážu sestavit správný poddotaz např. pro filtr "účastník nemá v žádném dni konání konference daný hotel" (tzn. v tabulce reg_acc nesmí být u dané registrace žádný z výčtu několika ID_acc_day) a nejsem si jistý, že něco takového v jednom dotazu udělat jde.
blaaablaaa
Profil
Ještě doplním, že tento výpis je pouze pro administraci, kterou ve většině případů bude používat jen jeden člověk najednou.

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

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

0