Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> wyszukiwanie 4 pól, wyszukiwanie po 4 polach z różną wart..
krzyszbi
post
Post #1





Grupa: Zarejestrowani
Postów: 251
Pomógł: 13
Dołączył: 15.09.2005

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
nospor
post
Post #2





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




tu masz link jak zrobic where na kilka warunków:
http://forum.php.pl/index.php?showtopic=34...=0&#entry195161
Go to the top of the page
+Quote Post
krzyszbi
post
Post #3





Grupa: Zarejestrowani
Postów: 251
Pomógł: 13
Dołączył: 15.09.2005

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
nospor
post
Post #4





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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. ?>
Go to the top of the page
+Quote Post
krzyszbi
post
Post #5





Grupa: Zarejestrowani
Postów: 251
Pomógł: 13
Dołączył: 15.09.2005

Ostrzeżenie: (0%)
-----


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ć

Ten post edytował krzyszbi 5.10.2005, 13:11:34
Go to the top of the page
+Quote Post
erafaelmi
post
Post #6





Grupa: Zarejestrowani
Postów: 15
Pomógł: 1
Dołączył: 8.03.2007

Ostrzeżenie: (0%)
-----


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ł
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 16.09.2025 - 01:03