Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Sposób na edytowanie zapytania poprzez OR.
Forum PHP.pl > Forum > Przedszkole
casperii
Panowie mam zapytanie do mysql

  1. $klatka1 = " `pole` LIKE '%$string%' AND `klatka`='klatka1' OR ";
  2. $klatka2 = " `pole` LIKE '%$string%' AND `klatka`='klatka2' OR ";
  3. $klatka3 = " `pole` LIKE '%$string%' AND `klatka`='klatka3' ";
  4.  
  5. $query = $db->query("SELECT `pole`, `klatka` FROM `tabelka` WHERE ".$klatka1." ".$klatka2." ".$klatka3." GROUP BY `pole` ORDER BY `pole` ASC LIMIT 10");


Powyższe klatki są dopisywane do zapytania, jeżeli istnieją (zostały wczytane). Jak rozgryźć sytuacji jak będzie miała być tylko klatka1 i klatka2 ? Przecież wówczas wywali nie poprawną składnie SQL.
markuz
  1. $klatki = array('klatka1', 'klatka2');
  2. $query = $db->query("SELECT `pole`, `klatka` FROM `tabelka` WHERE `pole` LIKE '%{$string}%' AND `klatka` IN ('".implode("','", $klatki)."') GROUP BY `pole` ORDER BY `pole` ASC LIMIT 10");
Może tak?
casperii
@markuz dzięki za kod. Lecz odnośnie tego:

  1. $klatki = array('klatka1', 'klatka2');


to do array musi być dopisywane te klatki które fizycznie zostały wybrane.

  1. if(!empty($klatka1)=='klatka1'){
  2. $klatka1 = 'klatka1';
  3. }
  4.  
  5. $klatki = array($klatka1, $klatka2);


Tylko nie wiem czy taka forma jest poprawna? Bo co jeśli nie będzie istnieć zmienna $klatka1 ? czy wówczas array nie wywali się? Będzie działać poprawnie? biggrin.gif

Właśnie co zauważyłem to pokazuje mi tylko wyniki z ostatniej klatki, a powinno pokazać wyniki z klatka1, klatka2 - jeżeli istnieją warunki dla tych dwóch zmiennych

Nikt nie zna odpowiedzi?
KsaR
  1. if(!empty($klatka1)=='klatka1'){
  2. $klatka1 = 'klatka1';
  3. }

Zły warunek zrobiłeś tongue.gif

Prędzej coś typu:

  1. if (isset($klatka1) && 'klatka1'===$klatka1){ # jesli istnieje zmienna klatka1 oraz ma wartosc 'klatka1'
  2. $klatki['klatka1']=''; # dodajemy do klatek 'klatke1'
  3. }
casperii
czekaj bo nie czaje:

  1. $klatka1 = $db->real_escape_string($_POST['klatka1']); //$klatka odbiera wartość klat1
  2. $klatka2 = $db->real_escape_string($_POST['klatka2']);//$klatka2 odbiera wartość klat2
  3. $klatka3 = $db->real_escape_string($_POST['klatka3']);//$klatka3 odbiera wartość klat3
  4.  
  5. if (isset($klatka1) && 'klat1'===$klatka1){
  6. $klatki['klatka1']='';
  7. }
  8.  
  9. if (isset($klatka2) && 'klat2'===$klatka2){
  10. $klatki['klatka2']='';
  11. }
  12.  
  13. if (isset($klatka3) && 'klat3'===$klatka3){
  14. $klatki['klatka3']='';
  15. }
  16.  
  17. //$klatki=array('klatka1','klatka2','klatka3'); // wstawienie takiego array'a pobiera tylko klatka3.
  18.  
  19. $query = $db->query("SELECT `pole`, `klatka` FROM `tabelka` WHERE `pole` LIKE '%{$string}%' AND `klatka` IN ('".implode("','", $klatki)."') GROUP BY `pole` ORDER BY `pole` ASC LIMIT 10");


@KsaR chyba źle coś zrobiłem :-( Pomożesz ? biggrin.gif
markuz
  1. $klatki = [];
  2. $min = 1; $max = 3;
  3. for($m = $min; $m <= $max; $m++) {
  4. if(isset($_POST['klatka' . $m])) {
  5. $klatki['klatka' . $m] = $db->real_escape_string($_POST['klatka' . $m]);
  6. }
  7. }
  8.  
  9. $query = $db->query("SELECT `pole`, `klatka` FROM `tabelka` WHERE `pole` LIKE '%{$string}%' AND `klatka` IN ('".implode("','", array_keys($klatki))."') GROUP BY `pole` ORDER BY `pole` ASC LIMIT 10");


O coś takiego Ci chodzi?
casperii
@markuz Nie wiem czy o to bo nie mogę przetestować biggrin.gif
  1. $klatki = [];

Parse error..

DB:
klatka = klat1, klat2, klat3

PHP:

  1. $klatka1 = $db->real_escape_string($_POST['klatka1']); //$klatka odbiera wartość klat1
  2. $klatka2 = $db->real_escape_string($_POST['klatka2']);//$klatka2 odbiera wartość klat2
  3. $klatka3 = $db->real_escape_string($_POST['klatka3']);//$klatka3 odbiera wartość klat3


powyższe klatki są wczytywane w różnych kombinacjach (może być klatka1, klatka3, może być samo klatka2 etc.)

Ogólnie to mi chodzi o to, żeby wyszukało mi wyniki które spełnią mój warunek odnośnie klatki.
Jeżeli istnieje klatka 1 i 2 to wyświetl wyniki:

  1. $query = $db->query("SELECT `pole`, `klatka` FROM `tabelka` WHERE (`pole` LIKE '%$queryString%' AND `klatka`='klat1') OR (`pole` LIKE '%$queryString%' AND `klatka`='klat2' ) GROUP BY `pole` ORDER BY `pole` ASC LIMIT 10");


Jeżeli istnieje klatka 1 i 3 to wyświetl wyniki:
  1. $query = $db->query("SELECT `pole`, `klatka` FROM `tabelka` WHERE (`pole` LIKE '%$queryString%' AND `klatka`='klat1') OR (`pole` LIKE '%$queryString%' AND `klatka`='klat3' ) GROUP BY `pole` ORDER BY `pole` ASC LIMIT 10");

etc.

Myślę, że rozjaśniłem lepiej :-)
nospor
http://nospor.pl/wyszukiwarka-zapytanie-za...d-warunkow.html
Tylko u ciebie zamiast AND trzeba laczyc przez OR i tyle
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.