Witam!
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);
$value = str_replace("+", "%' AND z_meta LIKE '%", $value); $options = 0;
$sql = "SELECT DISTINCT ";
if ( count($type) > 0
) { 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 ";
if ( count($type) > 0
) { 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";
}
}
}
if ( count($type) > 0
) { $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