Buduję rozbudowaną wyszukiwarkę opartą o bazę MySQL. Możemy wybrać czy szukamy z jednej tabeli, dwóch czy trzech. Przy wyszukiwaniu z jednej problemu nie ma, przy dwóch otrzymany wynik jest iloczynem komórek tych tabel. Nie mam pojęcia jakim warunkiem to usunąć. Nie łącze tabel ani nie grupuje.
<?php public function search($value, $type, $param, $startRow = 0, $maxRows = null) { //$value = str_replace(' ', '', $value); $options = 0; $sql = "SELECT DISTINCT "; foreach($type as $typ) { if ( $typ == 'zlew' ) { $sql .= "z.z_id, z.z_miniatura, z.z_indeks, z.z_nowyindeks, z.z_kodean, z.z_nazwa, z
.z_nazwaeng, z.z_srednicas, z.z_srednicasc, z.z_ilosco, z.z_cenak, z.z_cenaeur "; $options++; } if ( $typ == 'umyw' ) { if ( $options > 0 ) { $sql .= ", "; } $sql .= "u.u_id, u.u_miniatura, u.u_indeks, u.u_nowyindeks, u.u_kodean, u.u_nazwa, u
.u_nazwaeng, u.u_srednicas, u.u_srednicasc, u.u_ilosco, u.u_cenak, u.u_cenaeur "; $options++; } if ( $typ == 'wann' ) { if ( $options > 0 ) { $sql .= ", "; } $sql .= "w.w_id, w.w_miniatura, w.w_indeks, w.w_nowyindeks, w.w_kodean, w.w_nazwa, w
.w_nazwaeng, w.w_srednicas, w.w_srednicasc, w.w_ilosco, w.w_cenak, w.w_cenaeur "; } } } $sql .= "FROM "; foreach($type as $typ) { if ( $typ == 'zlew' ) { $sql .= TABLE_SYFONZ." as z"; } if ( $typ == 'umyw' ) { if ( $options > 0 ) { $sql .= ", "; } $sql .= TABLE_SYFONU." as u"; } if ( $typ == 'wann' ) { if ( $options > 0 ) { $sql .= ", "; } $sql .= TABLE_SYFONW." as w"; } } } $sql .= " WHERE "; foreach($type as $typ) { if ( $typ == 'zlew' ) { if ( $value != '' ) { $sql .= " z.z_meta LIKE '%$value%' "; if ( $param['ilosckomor'] == 1 ) { $sql .= "AND z.z_meta LIKE '%jednokomorowy%' "; } if ( $param['ilosckomor'] == 2 ) { $sql .= "AND z.z_meta LIKE '%dwukomorowy%' "; } } else { if ( $param['ilosckomor'] == 1 ) { $sql .= "z.z_meta LIKE '%jednokomorowy%' "; } if ( $param['ilosckomor'] == 2 ) { $sql .= "z.z_meta LIKE '%dwukomorowy%' "; } if ( $param['ilosckomor'] == '' ) { $sql .= " z.z_meta LIKE '%$value%' "; } } if ( $value != '' ) { $sql .= "OR z.z_kodean LIKE '%$value%' OR z.z_nowyindeks LIKE '%$value%' "; } } if ( $typ == 'umyw' ) { if ( $options > 0 ) { $sql .= " AND u.u_meta LIKE '%$value%' OR u.u_kodean LIKE '%$value%' OR u.u_nowyindeks LIKE '%$value%' "; } else { $sql .= " u.u_meta LIKE '%$value%' OR u.u_kodean LIKE '%$value%' OR u.u_nowyindeks LIKE '%$value%' "; } } if ( $typ == 'wann' ) { if ( $options > 0 ) { $sql .= " AND w.w_meta LIKE '%$value%' OR w.w_kodean LIKE '%$value%' OR w.w_nowyindeks LIKE '%$value%' "; } else { $sql .= " w.w_meta LIKE '%$value%' OR w.w_kodean LIKE '%$value%' OR w.w_nowyindeks LIKE '%$value%' "; } } } } ?>
Może lekko zakręciłem. Ogólnie jeszcze tak złożonej wyszukiwarki nie budowałem, więc każda porada będzie wskazana
