Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP]Sposób na edytowanie zapytania poprzez OR., pomoc w napisaniu optymalnego zapytania.
casperii
post
Post #1





Grupa: Zarejestrowani
Postów: 681
Pomógł: 28
Dołączył: 14.08.2014

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


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.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 7)
markuz
post
Post #2





Grupa: Zarejestrowani
Postów: 1 240
Pomógł: 278
Dołączył: 11.03.2008

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


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





Grupa: Zarejestrowani
Postów: 681
Pomógł: 28
Dołączył: 14.08.2014

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


@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? (IMG:style_emoticons/default/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?

Ten post edytował casperii 16.01.2016, 12:37:46
Go to the top of the page
+Quote Post
KsaR
post
Post #4





Grupa: Zarejestrowani
Postów: 520
Pomógł: 102
Dołączył: 15.07.2014
Skąd: NULL

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


  1. if(!empty($klatka1)=='klatka1'){
  2. $klatka1 = 'klatka1';
  3. }

Zły warunek zrobiłeś (IMG:style_emoticons/default/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. }


Ten post edytował KsaR 17.01.2016, 06:10:20
Go to the top of the page
+Quote Post
casperii
post
Post #5





Grupa: Zarejestrowani
Postów: 681
Pomógł: 28
Dołączył: 14.08.2014

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


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 ? (IMG:style_emoticons/default/biggrin.gif)

Ten post edytował casperii 17.01.2016, 13:00:49
Go to the top of the page
+Quote Post
markuz
post
Post #6





Grupa: Zarejestrowani
Postów: 1 240
Pomógł: 278
Dołączył: 11.03.2008

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


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





Grupa: Zarejestrowani
Postów: 681
Pomógł: 28
Dołączył: 14.08.2014

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


@markuz Nie wiem czy o to bo nie mogę przetestować (IMG:style_emoticons/default/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 :-)

Ten post edytował casperii 17.01.2016, 13:31:53
Go to the top of the page
+Quote Post
nospor
post
Post #8





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




http://nospor.pl/wyszukiwarka-zapytanie-za...d-warunkow.html
Tylko u ciebie zamiast AND trzeba laczyc przez OR i tyle
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: 23.08.2025 - 10:31