Na stronie mam formularz wyszukiwania z 5 polami tekstowymi.
W których podaje:
- Nazwę
- Miejscowość
- Branżę (Jedna nazwa może zawierać do 4 branży)
- Ulicę
- Hobby (Jedna nazwa może zawierać do 4 hobby)
Prawidłowe działanie wyszukiwarki:
Jeśli ktoś poda tylko nazwę: wyszuka mu wszystkie rekordy w których kolumna nazwa = nazwa
Jeśli ktoś poda nazwę i miejscowość: wyszuka mu wszystkie rekordy w których kolumna nazwa = nazwa i miejscowość = miejscowość
Innymi słowy każde dodatkowe pole ogranicza wyniki wyszukiwania.
Na chwilę obecną jest to zrealizowane za pomocą poniższego kodu:
$sql = 'SELECT * FROM company WHERE'; $sql .= ' c_name LIKE :c_name AND'; } $sql .= ' c_city LIKE :c_city AND'; } $sql .= ' c_street LIKE :c_street AND'; } $sql .= ' c_hobby LIKE :c_hobby AND';; } $sql .= ' c_trade LIKE :c_trade AND'; } $stmt = $db->prepare($sql);
Oszczędziłem Wam bindowanie zmiennych. To działa. W prawdzie nie było jeszcze testowane porządnie, ale dział.
Problem pojawia się gdy chciałbym poddać tabelę normalizacji (na razie wszystko jest w jednej tabeli) i tak:
W tabeli zostałoby:
ID | Nazwa | ID_NAZWA_ADRES | ID_NAZWA_HOBBY | ID_NAZWA_BRAZNA
Powstałyby kolejne 3 pary tabel:
ID_BRANZA | BRANZA
ID_NAZWA_BRAZNA | ID_NAZWA | ID_BRANZA
ID_HOBBY | HOBBY
ID_NAZWA_HOBBY | ID_NAZWA | ID_HOBBY
ID_ADRES | MIASTO | ULICA
ID_NAZWA_ADRES | ID_NAZWA | ID_ADRES
Głowię się i głowię i nie mam pomysłu jak teraz skutecznie i efektywnie przeprowadzić wyszukiwanie :/
PS
Nie mam jeszcze dużego doświadczenia w budowaniu stron internetowych więc moje pytanie jeszcze brzmi -> czy warto poddawać bazę danych procesowi normalizacji? Czy nie lepiej np. trzymać wszystko w jednej tabeli i później bawić się explode | implode itd.
Swoją drogą znacie jakiś dobry artykuł traktujący o OOP w PHP - nie chodzi o składnie bo tą znam - niestety nie do końca czuję jak przenieś się z proceduralnego właśnie na OOP + MVC :/
Podbijam!