Mám těch seznamů víc, mám to všechno v polích přímo v aplikaci a prý to není správné řešení. Měl bych to uložit mimo php. Což dává docela smysl. Ovšem mysql na webzdarma je pomalé. Dát to do sqlite? uživatel se bude např. registrovat, a musím provést výpis zemí. Když vybere zemi, tak provést výpis regionů a když vybere region tak výpis města. To je spousta dat. Načítání tak velkého souboru je vlastně zbytečné. Ale při těchto výběrech si myslím že SQL je docela neeffektivní. Co třeba místo toho abych ukládal jednotlivá města do db, udělat to tak, že bych uložil celý řetězec a oddělil bych ho středníkama? Select mi vrátí celý text a ten si rozparsuju a myslím že to bude rychlejší než spouštět smyčku s mysql_fetch_array (které časem nahradím za PDO). Které řešení je nejméně náročné? Návrh pro tabulku by mohl vypadat takto:
id INT(3), lang CHAR (2), typ INT (3) string (VARCHAR), txt (TEXT)
třeba u položky "gender" bych zadal dotaz "SELECT txt FROM options WHERE lang='cs' AND typ = '1' a měl bych dostat "muž;žena". To bych si rozparsoval. Zde je ale nevýhoda, že toto rozvržení se nehodí pro regiony a města. Tam by se mi zase hodily jiné údaje např.
id INT(4), lang CHAR (2), typ INT (3), parent INT (3), child INT (3), string (VARCHAR), txt (TEXT)
tak třeba pro ČR bych měl tyto hodnoty:
000, 'cs', 0, null, null, 'Česká Republika,Slovensko,Polsko,Německo,Rakousko,Maďarsko', null
001, 'en', 0, null, null, 'Czech Republic,Slovakia,Poland,Germany,Austria,Hungary', null
006, 'cs', 1, 000, 017, 'Česká Republika', null
017, 'cs', 2, 006, null, 'Praha;Jižní Čechy;Severní Čechy;Jižní Morava;Severní Morava;', null
300, 'cs', 3, 017, 500, 'Severní Morava', null
500, 'cs', 3, 300, null, null, 'Opava;Ostrava;Český Těšín;Frýdek Místek;Vsetín...'
Takže pro výpisy zemí budu vracet jen jeden string s id 000, pro výpis regionů budu vracet string s id 017, pro výpisy měst vracet string s id 500 (poté co vyberu kraj SM).
Případně je výhoda že mohu pracovat i s rodičem pokud bych potřeboval vrátit seznam zemí ze kterých jsem vybíral.
Je to tak schůdné nebo byste doporučili něco jiného? Další varianta je parsovat soubor txt.