Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: wyszukiwanie 4 pól
Forum PHP.pl > Forum > Bazy danych > MySQL
krzyszbi
witam
mam taki problemik
mam baze danych
jest w nie 13 pól
dajmy

cena
rok
moc
moc_s

i mam wyszukać z bazy rekordy spełniajace następujace wymagania
w formularzu jest 8 pól do których wpiuje
cona_od cena_do
rok_od rpk_do
moc_od moc_do
moc_s_od moc_s_do
i teraz dla mnie zaczynaja się schody (jak narazie nie widze ich końca)
próbowałem na dwa następujace znane mi sposoby

  1. SELECT *
  2. FROM dane_trak WHERE cena>$cena_od AND cena<$cena_do OR (cena>$cena_od OR cena<$cena_do)

ale ten sposób juz po dwóch poach mi wywala komunikat o błedzie

następny sposób jest moze troche prymitywny i długi w napisaniu ale za to
działa (ja napisałem obsługę 4 pól otrzymanych z formularza -- w sumie wyszło 16 kombinacji jakie mogąprzy takiej ilości wystąpic --- ja potrzebuje obsługi 8 pól z formularza czyli wyjdzie 64 możliwych kombinacji)
a to kod z php
  1. <?php
  2. include("files/konfig.inc");
  3. $trak_cena_od = $_POST['cena_od'];
  4. $trak_cena_do = $_POST['cena_do'];
  5. $trak_rok_prod_od = $_POST['rok_od'];
  6. $trak_rok_prod_do = $_POST['rok_do'];
  7. if(strlen($trak_cena_od)!=&& strlen($trak_cena_do)==&& strlen($trak_rok_prod_od)==&& strlen($trak_rok_prod_do)==0)
  8. $zapytanie = "select * from dane_trak where cena > $trak_cena_od";
  9.  
  10. if(strlen($trak_cena_od)==&& strlen($trak_cena_do)!=&& strlen($trak_rok_prod_od)==&& strlen($trak_rok_prod_do)==0)
  11. $zapytanie = "select * from dane_trak where cena < $trak_cena_do";
  12.  
  13. if(strlen($trak_cena_od)==&& strlen($trak_cena_do)==&& strlen($trak_rok_prod_od)!=&& strlen($trak_rok_prod_do)==0)
  14. $zapytanie = "select * from dane_trak where rok > $trak_rok_prod_od";
  15.  
  16. if(strlen($trak_cena_od)==&& strlen($trak_cena_do)==&& strlen($trak_rok_prod_od)==&& strlen($trak_rok_prod_do)!=0)
  17. $zapytanie = "select * from dane_trak where rok < $trak_rok_prod_do"; //wybiera po jednym
  18.  
  19. if(strlen($trak_cena_od)!=&& strlen($trak_cena_do)!=&& strlen($trak_rok_prod_od)==&& strlen($trak_rok_prod_do)==0)
  20. $zapytanie = "select * from dane_trak where cena between $trak_cena_od and $trak_cena_do";
  21.  
  22. if(strlen($trak_cena_od)==&& strlen($trak_cena_do)==&& strlen($trak_rok_prod_od)!=&& strlen($trak_rok_prod_do)!=0)
  23. $zapytanie = "select * from dane_trak where rok between $trak_rok_prod_od and $trak_rok_p
    rod_do"
    ; //wybiera po dwa jednakowe
  24.  
  25. if(strlen($trak_cena_od)!=&& strlen($trak_cena_do)==&& strlen($trak_rok_prod_od)==&& strlen($trak_rok_prod_do)!=0)
  26. $zapytanie = "select * from dane_trak where (cena > $trak_cena_od) and (rok < $trak_rok_prod_do)";
  27.  
  28. if(strlen($trak_cena_od)==&& strlen($trak_cena_do)!=&& strlen($trak_rok_prod_od)==&& strlen($trak_rok_prod_do)!=0)
  29. $zapytanie = "select * from dane_trak where (cena < $trak_cena_do) and (rok < $trak_rok_prod_do)";
  30.  
  31. if(strlen($trak_cena_od)!=&& strlen($trak_cena_do)==&& strlen($trak_rok_prod_od)!=&& strlen($trak_rok_prod_do)==0)
  32. $zapytanie = "select * from dane_trak where (cena > $trak_cena_od) and (rok > $trak_rok_prod_od)";
  33.  
  34. if(strlen($trak_cena_od)==&& strlen($trak_cena_do)!=&& strlen($trak_rok_prod_od)!=&& strlen($trak_rok_prod_do)==0)
  35. $zapytanie = "select * from dane_trak where (cena < $trak_cena_do) and (rok > $trak_rok_prod_od)";  //wybiera po dwa różne
  36.  
  37. if(strlen($trak_cena_od)!=&& strlen($trak_cena_do)!=&& strlen($trak_rok_prod_od)!=&& strlen($trak_rok_prod_do)==0)
  38. $zapytanie = "select * from dane_trak where (cena between $trak_cena_od and $trak_cena_do) && (rok > $trak_rok_prod_od)";
  39.  
  40. if(strlen($trak_cena_od)!=&& strlen($trak_cena_do)!=&& strlen($trak_rok_prod_od)==&& strlen($trak_rok_prod_do)!=0)
  41. $zapytanie = "select * from dane_trak where (cena between $trak_cena_od and $trak_cena_do) && (rok < $trak_rok_prod_do)";
  42.  
  43. if(strlen($trak_cena_od)==&& strlen($trak_cena_do)!=&& strlen($trak_rok_prod_od)!=&& strlen($trak_rok_prod_do)!=0)
  44. $zapytanie = "select * from dane_trak where (cena < $trak_cena_do) && (rok between $trak_rok_prod_od and $trak_rok_prod_do)";
  45.  
  46. if(strlen($trak_cena_od)!=&& strlen($trak_cena_do)==&& strlen($trak_rok_prod_od)!=&& strlen($trak_rok_prod_do)!=0)
  47. $zapytanie = "select * from dane_trak where (cena > $trak_cena_od ) && (rok between $trak_rok_prod_od and $trak_rok_prod_do)";  //wybiera trzy z czterech
  48.  
  49.  
  50. if(strlen($trak_cena_od)!=&& strlen($trak_cena_do)!=&& strlen($trak_rok_prod_od)!=&& strlen($trak_rok_prod_do)!=0)
  51. $zapytanie = "select * from dane_trak where (cena between $trak_cena_od and $trak_cena_do) && (rok between $trak_rok_prod_od and $trak_rok_prod_do)";  //wybiera wszystkie 4
  52.  
  53.  
  54. if(strlen($trak_cena_od)==&& strlen($trak_cena_do)==&& strlen($trak_rok_prod_od)==&& strlen($trak_rok_prod_do)==0)
  55. $zapytanie = "select * from $tabela ";  //nie wybiera żadnego
  56.  $wynik=mysql_query($zapytanie);
  57.  while($wiersz=mysql_fetch_array($wynik))
  58.  echo"traktor".$wiersz['id']."  ".$wiersz['info']."<br>";
  59. ?>

może ktoś zna sposób na rozwiazanie lub pomoże mi rozwiązać ten problem
nospor
tu masz link jak zrobic where na kilka warunków:
http://forum.php.pl/index.php?showtopic=34...=0&#entry195161
krzyszbi
czyli i tak musze napisać wszystkie warunki, tyle ile jest możliwych kombinacji (64)
moze sie myle ale jest to trochę męcząca a i tak można się gdzies pomylić
może ktoś wie jak to można jakoś dynamicznie wygenerować
z góry dzięki za pomoc
nospor
mylisz się. nie zalapales idei. Ty robisz tylko waruni na pola. kombinacje same sie utworzą, przy zalozeniu oczywiscie że kazde wypelnione pole to warunek and lub or. Chodzi o to zeby byl tylko jeden typ warunku
  1. <?php
  2.  
  3. $wh = array();
  4. if (!empty($_POST['cena_od']))
  5.  $wh[] = 'cena >= '.$_POST['cena_od'];
  6. if (!empty($_POST['cena_do']))
  7.  $wh[] = 'cena <= '.$_POST['cena_do'];
  8. //.....i tak na kazde pola czyli nie 64 a 8 razy :)
  9. if (!empty($wh))
  10.  $where = 'where '.implode(' and ', $wh);
  11. else
  12.  $where = '';
  13.  
  14. $sql = 'select ..... '.$where;
  15.  
  16. ?>
krzyszbi
ok
załapałem
ale jak możesz to podpowiedz jak zrobić aby po wszystkich załózmy 4 polach wyszukiwałe bo jak wypełniew formularzu załóżmy 4 pola to
$where przyjmujke następującą postać
Cytat
where cena >= 1 and cena <= 1457 and cena >= 125 and cena <= 3650

gdzie dwie ostatnie "cana" powinno być "rok"
co trzeba poprawić

chyba się troszkę pośpieszyłem
znalazłem błąd
dzięki
jak nie będzie szukało to dam znać
erafaelmi
Rzeczywiście przydatny warunek dla wielu pól w formularzu, które nie wszystkie muszą być wyszukane

  1. $wh = array();
  2. if (!empty($_POST['imie'])) {
  3. $wh[] = 'imie = '.'"'.$_POST['imie'].'"'; //imie
  4. }
  5. if (!empty($_POST['nazwisko'])) {
  6. $wh[] = 'nazwisko = '.'"'.$_POST['nazwisko'].'"'; //nazwisko
  7. }
  8. if (!empty($_POST['adres'])) {
  9. $wh[] = 'adres = '.'"'.$_POST['adres'].'"'; //adres
  10. }
  11. if (!empty($_POST['miejscowosc'])) {
  12. $wh[] = 'miejscowosc = '.'"'.$_POST['miejscowosc'].'"'; //miejscowosc
  13. }
  14. //.....i tak na kazde pola czyli nie 64 a 8 razy :)
  15.  
  16. if (!empty($wh)) {
  17. $where = 'WHERE '.implode(' and ', $wh);
  18. $query = 'SELECT * FROM tabela '.$where.' ORDER BY id DESC';
  19. } else {
  20. $query = 'SELECT * FROM tabela ORDER BY id DESC';
  21. }


Podziękował
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.