Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: konstrukcja kodu wiele warunków
Forum PHP.pl > Forum > Bazy danych > MySQL
straku
Witam Was.
Otóż mam pewnien nie mały problem ze skonstruowaniem jednego zapytania do bazy danych, aby pobrać dane z kilkoma warunkami.
Mam kod, który pobiera z adresu zmienne:

  1. $co_szukam = $_GET['typ'];
  2. $szuka_rodzaj = $_GET['rodzaj'];
  3. $szuka_cena_od = $_GET['cena_od'];
  4. $szuka_cena_do = $_GET['cena_do'];
  5. $szuka_waluta = $_GET['waluta'];
  6. $szuka_pow_od = $_GET['pow_od'];
  7. $szuka_pow_do = $_GET['pow_do'];
  8. $szuka_wojewodztwo = $_GET['wojewodztwo'];
  9. $szuka_miejscowosc = $_GET['miejscowosc'];
  10. $szuka_zdjecie = $_GET['zdjecie'];


które chciałbym użyć w jednym zapytaniu:

  1. $zapytanie_specjalne = mysql_query("SELECT id_domu, rodzaj, typ, miejscowosc, powierzchnia, nr_oferty, data_dodania, cena FROM domy WHERE typ='$co_szukam' ORDER BY nr_oferty DESC LIMIT 8") or die ("Błąd zap. ");


Wyglądałoby to następująco:
Z kolumny rodzaj pobrac $szuka_rodzaj,
z kolumny miejscowosc pobrac $szuka_miejscowosc... itp


Dodam tylko, że jest to kawałek kodu z napisanego przeze mnie skryptu wyszukiwania.
skowron-line
Możesz coś takiego zrobić
  1. if($_POST['pole'] != '')
  2. {
  3. $where[] = 'pole = "'. $_POST['pole'] .'";
  4. }
  5.  
  6. if($_POST['pole1'] != '')
  7. {
  8. $where[] = 'pole1 = "'. $_POST['pole1'] .'";
  9. }
  10.  
  11. echo join(" AND", $where); // tu musisz dodać do zapytania warunek który zawsze będzie spełniony tak żebyś nie miał zapytania w stylu
  12. //select * from tabela AND pole = "pole"

lub warunki zastąpić pętlą
Sephirus
  1. $fields = array('pole1','pole2','pole3'); // wypisujemy jakie pola mają się przerzucać do SQL
  2.  
  3. $values = array();
  4. foreach($fields AS $f) {
  5. if(isset($_GET[$f])) {
  6. $values = $f.' = '\''.$_GET[$f].'\'';
  7. }
  8. }
  9.  
  10. $sql = 'SELECT ..... ttuaj daj reszte .... WHERE '.implode(' AND ',$values);


I tyle (nie testowałem kodu - chodziło mi o idee)
straku
Pomysły wydaja się być dobre ale...

  1. $zapytanie_specjalne = mysql_query
  2. ("SELECT id_domu FROM domy")
  3. ("SELECT rodzaj FROM domy WHERE rodzaj='$szuka_rodzaj'")
  4. ("SELECT typ FROM domy WHERE typ='$co_szukam'")
  5. ("SELECT miejscowosc FROM domy WHERE miejscowosc='$szuka_miejscowosc'")
  6. ("SELECT powierzchnia FROM domy WHERE powierzchnia='$szuka_pod_od'")
  7. ("SELECT nr_oferty FROM domy")
  8. ("SELECT data_dodania FROM domy")
  9. ("SELECT cena FROM domy WHERE cena='$szuka_cena_od'")
  10. ORDER BY nr_oferty DESC LIMIT 8") or die ("Błąd zap. ");


Noi drugi problem nie mam w zmiennych np. daty_dodania, czy id_domu bo te wartości nie są precyzowane podczas wyszukiwania przez klienta (nie zawsze jest warunek). Trzeba wykorzystać JOIN czy UNION? Zależy mi aby zapytanie było czytelne i łatwe później do modyfikacji (tak jak te wyżej).
d3ut3r
tam wyżej już Ci napisali jak to zrobić dość szybko wszystko opiera się na zasadzie:

  1. $fields=array('rodzaj','typ','miejscowosc','powierzchnia','cena');
  2.  
  3. $where=array();
  4.  
  5.  
  6. foreach ($fields as $field){
  7.  
  8.  
  9. if (isset($_POST[$field]) && !empty($_POST[$field])){
  10. $val=mysql_real_escape_string($_POST[$field]);
  11. $where[]=$field.' = \''.$val.'\'';
  12. }
  13.  
  14. }
  15.  
  16. $sql='SELECT id_domu,rodzaj,typ,miejscowosc,powierzchnia,nr_oferty,data_dodania,cena
  17. FROM domy';
  18.  
  19. if (count($where)>0){
  20. $sql.=' WHERE '.implode($where,' AND ');
  21. }
  22.  
  23. $res=mysql_query($sql);


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.