Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Sposob na zapytanie SQL zalezne od wielu $, formularz i filtrowanie bazy
Mr Groch
post
Post #1





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 23.05.2005
Skąd: Knurów

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


Witam

Czy da sie w deklaracji zmiennej umiescic warunek?
np takie cos:

$cos = if($bla='bla'){echo('bla to bla');};

Wiem ze teraz zapis ten jest bez sensu, ale czy da sie
takie cos poprawnie zapisac?

Jezlei nie to prosilbym o pomoc w jaki sposob rozwiazac problem:

Zapytanie do sql:

select * from tabela /*jezeli jakas zmienna ma okreslona wartosc to: */ where cos = '$zmienna' /*jezlei inna zmienna ma okreslona wartosc to: */ and cos2 = '$zmienna2' /*i tak dalej*/;

Wyjasnienie:

Chcialbym by zapytanie do MySQL bylo rozne w zaleznosci od wartosci
paru zmiennych. Wiem, ze mozna to zrobic w paru(nastu) warunkach if i
tyle samo roznych wersji zapytan, ale tym sposobem kod rozroslby sie
naprawde za bardzo, gdyz tych zmiennych od ktorych zapytanie bedzie zalezne
jest bardzo duzo..

Z gory dziekuje...

Ten post edytował Mr Groch 24.05.2005, 16:58:27
Go to the top of the page
+Quote Post
NuLL
post
Post #2





Grupa: Zarejestrowani
Postów: 2 262
Pomógł: 21
Dołączył: 3.05.2004
Skąd: Sopot, Krakow, W-wa

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


  1. <?php
  2.  
  3. $cos = ($bla=='bla')'bla to bla' : '';
  4.  
  5. ?>


Co do drugiego pytanie - w manualu MySQL-a poszukaj o słowie IF (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Manual do ściągnięcia na stronie MySQL-a (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) (wreszcie nawet w .chm)
Go to the top of the page
+Quote Post
Mr Groch
post
Post #3





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 23.05.2005
Skąd: Knurów

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


Dzieki ale jest maly problem:

  1. SELECT *
  2. FROM $tabela WHERE IF($_typ!='','typ='$_typ'','')


MySQL sie pluje, ze niby za duzo apostrof w wyrazeniu ale gdy zostawie
'typ=$_typ' to otatecznie zapytanie bedzie wygladalo WHERE typ = CB i tutaj
bedzie sie plul, ze nie ma takiej kolumny CB (musi byc w apostrofach)...

A tak wogole to sytuacja wyglada tak:

Mam pobrane z tabeli dane i sa ladnie wyswietlone na stronce.
Jednakze na stronce znajduje sie formularz z 3 polami <select> i chce by dane
z tabeli byly odpowiednio "filtrowane" w zaleznosci od tego co zostalo
wybrane w polach <select>

Tymczasowo zrobilem to metoda duzej ilosci sprawdzan co zostalo wybrane
z pol <select> i w zaleznosci od tego, przygotowalem mnostwo roznych wersji zapytan
SQL - dziala ale skrypt obslugujacy ten formularz zajmuje naprawde duzo (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Tak to wyglada teraz:

  1. <?php
  2.  $_typ = $_POST[styp];
  3.  $_system = $_POST[ssystem];
  4.  $_mapa = $_POST[smapa];
  5.  
  6.  
  7.  if (($_typ=='') && ($_system=='') && ($_mapa=='')) {
  8. $query = &#092;"select * from \".$this->prefix.\"clanwars\";
  9.  
  10. $query .= &#092;" order by time desc limit $start,{$this->show}\";
  11. } // end if
  12.  
  13.  if (!($_typ=='') && ($_system=='') && ($_mapa=='')) {
  14. $query = &#092;"select * from \".$this->prefix.\"clanwars where (typ = '$_typ')\";
  15.  
  16. $query .= &#092;" order by time desc limit $start,{$this->show}\";
  17.  } // end if
  18.  
  19.  if (!($_typ=='') && !($_system=='') && ($_mapa=='')) {
  20. $query = &#092;"select * from \".$this->prefix.\"clanwars where (typ = '$_typ' and system = '$_system')\";
  21.  
  22. $query .= &#092;" order by time desc limit $start,{$this->show}\";
  23.  } // end if
  24.  
  25.  if (!($_typ=='') && !($_system=='') && !($_mapa=='')) {
  26. $query = &#092;"select * from \".$this->prefix.\"clanwars where (typ = '$_typ' and system = '$_system' and mapa = '$_mapa')\";
  27.  
  28. $query .= &#092;" order by time desc limit $start,{$this->show}\";
  29.  } // end if
  30.  
  31.  if (!($_typ=='') && ($_system=='') && !($_mapa=='')) {
  32. $query = &#092;"select * from \".$this->prefix.\"clanwars where (typ = '$_typ' and mapa = '$_mapa')\";
  33.  
  34. $query .= &#092;" order by time desc limit $start,{$this->show}\";
  35.  } // end if
  36.  
  37.  if (($_typ=='') && !($_system=='') && ($_mapa=='')) {
  38. $query = &#092;"select * from \".$this->prefix.\"clanwars where (system = '$_system')\";
  39.  
  40. $query .= &#092;" order by time desc limit $start,{$this->show}\";
  41.  } // end if
  42.  
  43.  if (($_typ=='') && !($_system=='') && !($_mapa=='')) {
  44. $query = &#092;"select * from \".$this->prefix.\"clanwars where (system = '$_system' and mapa = '$_mapa')\";
  45.  
  46. $query .= &#092;" order by time desc limit $start,{$this->show}\";
  47.  } // end if
  48.  
  49.  if (($_typ=='') && ($_system=='') && !($_mapa=='')) {
  50. $query = &#092;"select * from \".$this->prefix.\"clanwars where (mapa = '$_mapa')\";
  51.  
  52. $query .= &#092;" order by time desc limit $start,{$this->show}\";
  53.  } // end if
  54.  
  55. ?>


http://www.hordasquad.com/web/clanwars.php

PS. Co do warunku w zmiennej - nie wiem czemu ale korszystajac z podanego
przykladu zawsze zmienna otrzymywala wartosc taka jak przy warunku=true

Ten post edytował Mr Groch 24.05.2005, 01:29:25
Go to the top of the page
+Quote Post
luinnar
post
Post #4





Grupa: Zarejestrowani
Postów: 155
Pomógł: 0
Dołączył: 15.07.2004
Skąd: Bielsko-Biała

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


A nie lepiej to zrobić w stylu:
  1. <?php
  2. $query = 'SELECT pole1, pole2, pole3 FROM tabela WHERE ';
  3. switch($zmienna)
  4. {
  5.  case 'wartość1':
  6. $query .= 'id = 15'; // <-- przykładowy warunek, pamiętaj o kropce pomiędzy $query a =
  7. break;
  8.  case 'wartość2':
  9. $query .= 'dzial = 'cos''; // <-- przykładowy warunek2
  10. break;
  11. }
  12.  
  13. ?>
Go to the top of the page
+Quote Post
nospor
post
Post #5





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




a ja to zawsze robię tak:
  1. <?php
  2. $query = 'SELECT pole1, pole2, pole3 FROM tabela WHERE '.($zmienna==$cos?'id=15':'dzial='cos'').' ';
  3. ?>
Go to the top of the page
+Quote Post
SongoQ
post
Post #6





Grupa: Przyjaciele php.pl
Postów: 2 923
Pomógł: 9
Dołączył: 25.10.2004
Skąd: Rzeszów - studia / Warszawa - praca

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


Stosowanie warunkow w samym sqlu zpowalnia wykonywanie zapytan. Lepiej wygenerowac zapytanie w php tak aby bylo optymalne i przetwazanie bylo bardzo szybkie.

No chyba ze piszesz wlasne funkcje baz danych.
Go to the top of the page
+Quote Post
Mr Groch
post
Post #7





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 23.05.2005
Skąd: Knurów

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


Dzieki Wam za pomoc ale niestety przyklady, ktore podaliscie
sprawdzilyby sie tylko gdy zapytanie byloby zalezne od 1 zmiennej,
a w moim przypadku ma byc zalezne od wartosci 3 niezaleznych od siebie
zmiennych (planuje nawet wiecej)

Jezeli nie da sie tego zrobic w inny sposob, niz taki jaki przytoczylem wczesniej
to trudno - pogodze sie z tym (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Ten post edytował Mr Groch 24.05.2005, 12:37:22
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




No to zrób se tablicę z warunkami, do niej wkladasz kolejne warunki w zaleznosci od zmiennych a potem ilmplode:
  1. <?php
  2.  
  3. $wh=array();
  4. if ($cos1 && $cos2)
  5. {
  6.  $wh[]='war=wart';
  7.  $wh[]='war2=wart2';
  8. } 
  9. else
  10. //....
  11. $sql='.... where '.implode(' and ',$wh);
  12.  
  13. ?>
Go to the top of the page
+Quote Post
Mr Groch
post
Post #9





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 23.05.2005
Skąd: Knurów

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


O dzieki - implode() - nie wiedzialem ze takie cos istnieje a wlasnie tego szukalem (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
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: 17.09.2025 - 16:03