Neni to tajný, ruian poskytuje tyto záznamy v csv veřejně a pomocí scriptu je importuju do DB:
function loadFile($fileName, $_db) {
$folder = "csv";
$file = "$folder/$fileName";
$handle = fopen($file, "r");
try {
$query_ip = $_db->prepare('
INSERT INTO adresni_mista (kod_adm,kod_obce,nazev_obce,c,nazev_momc,b,nazev_mop,kod_casti_obce,nazev_casti_obce,kod_ulice, nazev_ulice,typ_so,cislo_domovni,cislo_orientacni, znak_cisla_orientacniho, psc,souradnice_y,souradnice_x,plati_od) VALUES (
?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?
)
');
// unset the first line like this
fgets($handle);
// created loop here
while (($data = fgetcsv($handle, 1000, ";")) !== FALSE) {
$query_ip->execute($data);
}
fclose($handle);
} catch(PDOException $e) {
die($e);
}
}
//nejdriv promazem db
$prep = $_db->prepare("TRUNCATE `ruian`.`adresni_mista`");
$prep->execute();
$files = scandir("csv");
foreach ($files as $file) {
$pripona= substr($file, -4);
if($pripona == ".csv") {
loadFile($file, $_db);
}
}
tabulka:
CREATE TABLE IF NOT EXISTS `adresni_mista` (
`id` int(11) NOT NULL,
`kod_adm` int(11) NOT NULL,
`kod_obce` int(11) NOT NULL,
`nazev_obce` char(70) COLLATE utf8_czech_ci NOT NULL,
`nazev_momc` text COLLATE utf8_czech_ci NOT NULL,
`nazev_mop` text COLLATE utf8_czech_ci NOT NULL,
`kod_casti_obce` int(11) NOT NULL,
`nazev_casti_obce` text COLLATE utf8_czech_ci NOT NULL,
`nazev_ulice` char(80) COLLATE utf8_czech_ci NOT NULL,
`typ_so` text COLLATE utf8_czech_ci NOT NULL,
`cislo_domovni` text COLLATE utf8_czech_ci NOT NULL,
`cislo_orientacni` int(11) NOT NULL,
`znak_cisla_orientacniho` text COLLATE utf8_czech_ci NOT NULL,
`psc` int(11) NOT NULL,
`souradnice_y` text COLLATE utf8_czech_ci NOT NULL,
`souradnice_x` int(11) NOT NULL,
`plati_od` datetime NOT NULL,
`a` varchar(100) COLLATE utf8_czech_ci NOT NULL,
`b` varchar(100) COLLATE utf8_czech_ci NOT NULL,
`c` varchar(100) COLLATE utf8_czech_ci NOT NULL,
`d` varchar(100) COLLATE utf8_czech_ci NOT NULL,
`kod_ulice` int(11) NOT NULL
)
A vlastně momentálně co reálná adresa, to řádek.
Uvažuju nad rozdělením:
Tabulka Města ID(int), nazev(char 50). psc(int 5)
Tabulka adresy: ID(int), mesto(int), ulice (char 70), čp (int), čo(int), x(int),y(int)
A nejdřív bych podle naštěpávače chtěl po uživateli zadat město, těch by už němělo být 3mil, a v druhém formuláři bych teprve hledal adresy podle toho města... Jen ještě nevím podle jaké topologie v naštěpávači vyhledávat ulici, čp/čo zároveň....
V principu chci docílit toho, aby uživatel co nejjednodušeji vyplnil svojí adresu (jen existující podle ruianu)...
Samozřejmě bych ho mohl donutit napsat celou adresu a pak mu dát na výběr 5 nejlepšíc shod, ale to je pro uživatele dost nekomfortní