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.

  1. <?php
  2. public function search($value, $type, $param, $startRow = 0, $maxRows = null) {
  3.  //$value = str_replace(' ', '', $value);
  4.  $value = str_replace("+", "%' AND z_meta LIKE '%", $value);
  5.  $options = 0;
  6.  $sql = "SELECT DISTINCT ";
  7.  if ( count($type) > 0 ) {
  8.  foreach($type as $typ) {
  9.  if ( $typ == 'zlew' ) {
  10.  $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 "
    ;
  11.  $options++;
  12.  }
  13.  if ( $typ == 'umyw' ) {
  14.  if ( $options > 0 ) {
  15.  $sql .= ", ";
  16.  }
  17.  $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 "
    ;
  18.  $options++;
  19.  }
  20.  if ( $typ == 'wann' ) {
  21.  if ( $options > 0 ) {
  22.  $sql .= ", ";
  23.  }
  24.  $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 "
    ;
  25.  }
  26.  }
  27.  }
  28.  $sql .= "FROM ";
  29.  if ( count($type) > 0 ) {
  30.  foreach($type as $typ) {
  31.  if ( $typ == 'zlew' ) {
  32.  $sql .= TABLE_SYFONZ." as z";
  33.  }
  34.  if ( $typ == 'umyw' ) {
  35.  if ( $options > 0 ) {
  36.  $sql .= ", ";
  37.  }
  38.  $sql .= TABLE_SYFONU." as u";
  39.  }
  40.  if ( $typ == 'wann' ) {
  41.  if ( $options > 0 ) {
  42.  $sql .= ", ";
  43.  }
  44.  $sql .= TABLE_SYFONW." as w";
  45.  }
  46.  }
  47.  }
  48.  
  49.  if ( count($type) > 0 ) {
  50.  $sql .= " WHERE ";
  51. foreach($type as $typ) {
  52.  if ( $typ == 'zlew' ) {
  53.  if ( $value != '' ) {
  54.  $sql .= " z.z_meta LIKE '%$value%' ";
  55.  if ( $param['ilosckomor'] == 1 ) {
  56.  $sql .= "AND z.z_meta LIKE '%jednokomorowy%' ";
  57.  }
  58.  if ( $param['ilosckomor'] == 2 ) {
  59.  $sql .= "AND z.z_meta LIKE '%dwukomorowy%' ";
  60.  }
  61.  }
  62.  else {
  63.  if ( $param['ilosckomor'] == 1 ) {
  64.  $sql .= "z.z_meta LIKE '%jednokomorowy%' ";
  65.  }
  66.  if ( $param['ilosckomor'] == 2 ) {
  67.  $sql .= "z.z_meta LIKE '%dwukomorowy%' ";
  68.  }
  69.  if ( $param['ilosckomor'] == '' ) {
  70.  $sql .= " z.z_meta LIKE '%$value%' ";
  71.  }
  72.  }
  73.  if ( $value != '' ) {
  74.  $sql .= "OR z.z_kodean LIKE '%$value%' OR z.z_nowyindeks LIKE '%$value%' ";
  75.  }
  76.  }
  77.  if ( $typ == 'umyw' ) {
  78.  if ( $options > 0 ) {
  79.  $sql .= " AND u.u_meta LIKE '%$value%' OR u.u_kodean LIKE '%$value%' OR u.u_nowyindeks LIKE '%$value%' ";
  80.  }
  81.  else {
  82.  $sql .= " u.u_meta LIKE '%$value%' OR u.u_kodean LIKE '%$value%' OR u.u_nowyindeks LIKE '%$value%' ";
  83.  }
  84.  }
  85.  if ( $typ == 'wann' ) {
  86.  if ( $options > 0 ) {
  87.  $sql .= " AND w.w_meta LIKE '%$value%' OR w.w_kodean LIKE '%$value%' OR w.w_nowyindeks LIKE '%$value%' ";
  88.  }
  89.  else {
  90.  $sql .= " w.w_meta LIKE '%$value%' OR w.w_kodean LIKE '%$value%' OR w.w_nowyindeks LIKE '%$value%' ";
  91.  }
  92.  }
  93.  }
  94.  }
  95. ?>


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 smile.gif