Witam,

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:

  1. $_GET = array_map('trim', $_GET);
  2. $sql = 'SELECT * FROM company WHERE';
  3. if(!empty($_GET['c_name']) && strlen($_GET['c_name']) > 3){
  4. $sql .= ' c_name LIKE :c_name AND';
  5. }
  6. if(!empty($_GET['c_city']) && strlen($_GET['c_city']) > 3){
  7. $sql .= ' c_city LIKE :c_city AND';
  8. }
  9. if(!empty($_GET['c_street']) && strlen($_GET['c_street']) > 3){
  10. $sql .= ' c_street LIKE :c_street AND';
  11. }
  12. if(!empty($_GET['c_hobby']) && strlen($_GET['c_hobby']) > 3){
  13. $sql .= ' c_hobby LIKE :c_hobby AND';;
  14. }
  15. if(!empty($_GET['c_trade']) && strlen($_GET['c_trade']) > 3){
  16. $sql .= ' c_trade LIKE :c_trade AND';
  17. }
  18.  
  19. $sql = rtrim($sql, 'AND');
  20. $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!