Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

2 Stron V   1 2 >  
Reply to this topicStart new topic
> [MySQL] [php] wyszukiwanie rekordu podając kilka wartości
kononowicz
post
Post #1





Grupa: Zarejestrowani
Postów: 238
Pomógł: 0
Dołączył: 12.11.2006
Skąd: Białystok

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


witam

napisałem w phpie skrypt wyszukujący rekordy z bazy mysql:

  1. <?php
  2. echo'<form action="example.php" method="post">';
  3. echo "<br>wpisz towar <br>";
  4. echo'<input type="text" name="towary" id="towary" value="">';
  5. echo "<br>wpisz kod <br>";
  6. echo'<input type="text" name="kod" id="kod" value="">';
  7. echo "<br>wpisz cenę <br>";
  8. echo'<input type="text" name="cena" id="cena" value="">';
  9.  
  10. echo'<input type="submit" name="znajdz" value="znajdz">';
  11. echo'<input type="reset" value="wyczyść">';
  12. echo'</form>';
  13.  
  14. if(isset($_POST['znajdz']))
  15. {
  16. $towary = $_POST['towary'];
  17. $kod = $_POST['kod'];
  18. $cena = $_POST['cena'];
  19.  
  20. $zapytanie = mysql_query("SELECT *
  21.  FROM `towary`,`dzialy`
  22.  WHERE `towary`.`TOWARY` LIKE '$towary'
  23.  AND `towary`.`KOD` LIKE '$kod'
  24.  AND `towary`.`CENA` LIKE '$cena' ");
  25.  echo "<table cellpadding="1" border=1>";
  26. echo "<tr>";
  27. echo "<td> towary </td>";
  28. echo "<td> kod </td>";
  29. echo "<td> cena </td>";
  30. echo "<td> działy </td>";
  31. echo "<tr>";
  32. while( $wiersz = mysql_fetch_array($zapytanie) )
  33. {
  34.  
  35. echo "<tr>";
  36. echo "<td>".$wiersz['TOWARY']."</td>";
  37. echo "<td>".$wiersz['KOD']."</td>";
  38. echo "<td>".$wiersz['CENA']."</td>";
  39. echo "<td>".$wiersz['ID_DZIALY']."</td>";
  40. echo "<tr>";
  41. }
  42. echo "</table>";
  43.  
  44. mysql_close($connection);
  45. }
  46. ?>


pytanie brzmi jak napisać zapytanie mysqlowe aby wyszukiwał mi rekord przy podaniu kilku wartosci np. podaję nazwe towaru i np. cene a wyszukiwarka wyszukuje mi dany towar. nie wiem jak mam sobie z tym poradzić: albo wyświetla mi kilka razy te same rekordy albo nie wyswietla mi nic (w zaleznosci czy uzyje AND albo OR). Jak powinnien wygladac poprawne wyszukiwanie w MySQLu?(IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif) (IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif) ? ewentualnie proszę o wszelkie sugestie na temat tego kodu w ogóle...

Ten post edytował kononowicz 4.12.2006, 03:31:58
Go to the top of the page
+Quote Post
dtb
post
Post #2





Grupa: Zarejestrowani
Postów: 476
Pomógł: 1
Dołączył: 5.11.2005
Skąd: Bieruń city

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


przetlumacz to na polski, bo z tego co widze w kodzie i zrozumialem z tresci wynika, ze skrypt wyszukuje zarowno pod wzgledem ceny, jak i nazwy
Go to the top of the page
+Quote Post
kononowicz
post
Post #3





Grupa: Zarejestrowani
Postów: 238
Pomógł: 0
Dołączył: 12.11.2006
Skąd: Białystok

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


Cytat(dtb @ 4.12.2006, 05:58:56 ) *
przetlumacz to na polski, bo z tego co widze w kodzie i zrozumialem z tresci wynika, ze skrypt wyszukuje zarowno pod wzgledem ceny, jak i nazwy



no własnie zalezy mi na tym aby skrypt wyswietlał dane w zaleznosci od tego jakie podam dane. jezeli podam tylko np. towar to wyswietla mi wzgledem towaru a jezeli podam towar i cene to wyswietla mi towar o podanej cenie. a jak według ciebie to powinno wyglądać?? zamiast and wpisałem or i teraz mi wyswietla wyniki jednak ten sam rekord wyswietla mi np. 6 razy :/




własnie zauwazyłem dlaczego wyswietlało mi kilka razy te same dane. oto poprawiony kod (jednak dziwnie sie zachowuje i nie szuka wszystkich danych :/):

  1. <?php
  2. echo'<form action="example.php" method="post">';
  3. echo "<br>wpisz towar <br>";
  4. echo'<input type="text" name="towary" id="towary" value="">';
  5. echo "<br>wpisz kod <br>";
  6. echo'<input type="text" name="kod" id="kod" value="">';
  7. echo "<br>wpisz cenę <br>";
  8. echo'<input type="text" name="cena" id="cena" value="">';
  9.  
  10. echo'<input type="submit" name="znajdz" value="znajdz">';
  11. echo'<input type="reset" value="wyczyść">';
  12. echo'</form>';
  13.  
  14. if(isset($_POST['znajdz']))
  15. {
  16. $towary = $_POST['towary'];
  17. $kod = $_POST['kod'];
  18. $cena = $_POST['cena'];
  19.  
  20. $zapytanie = mysql_query("SELECT distinct *  
  21.  FROM
  22.  `towary`
  23.  WHERE `towary`.`TOWARY` LIKE '%$towary%' OR `towary`.`KOD` LIKE '$kod' OR `towary`.`CENA` = '$cena' ");
  24.  
  25.  echo "<table cellpadding="1" border=1>";
  26. echo "<tr>";
  27. echo "<td> towary </td>";
  28. echo "<td> kod </td>";
  29. echo "<td> cena </td>";
  30. echo "<td> działy </td>";
  31. echo "<tr>";
  32. while( $wiersz = mysql_fetch_array($zapytanie) )
  33. {
  34. echo "<tr>";
  35. echo "<td>".$wiersz['TOWARY']."</td>";
  36. echo "<td>".$wiersz['KOD']."</td>";
  37. echo "<td>".$wiersz['CENA']."</td>";
  38. echo "<td>".$wiersz['ID_DZIALY']."</td>";
  39. echo "<tr>";
  40. }
  41. echo "</table>";
  42.  
  43. mysql_close($connection);
  44. }
  45. ?>


Ten post edytował kononowicz 4.12.2006, 06:42:30
Go to the top of the page
+Quote Post
Sedziwoj
post
Post #4





Grupa: Zarejestrowani
Postów: 793
Pomógł: 32
Dołączył: 23.11.2006
Skąd: Warszawa

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


Jak używasz OR w zapytaniu to szuka jednego lub drugiego, ale jeśli dostajesz w odpowiedzi kilka takich samych rekordów to oznacza, że jest ich kilka w bazie.
Więc jak chcesz aby wyszukany towar spełniał dwa warunki mszą być połączone AND.
Ogólnie sprawdź co w ogóle jest w bazie, bo mam dziwne przeczucie, że jest tam ogromny bałagan.
I jak zawsze doradzam przeczytanie jakiegoś kursu i jeśli sam tworzyłeś tą bazę to również takiego gdzie jest opisane jak powinno się tworzyć takie bazy, bo tu można popełnić sporo błędów.
Go to the top of the page
+Quote Post
acztery
post
Post #5





Grupa: Zarejestrowani
Postów: 945
Pomógł: 7
Dołączył: 15.03.2005
Skąd: katowice

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


a po co distinct (IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif) jezeli wpisze ktos cene 2 zł a wiecej produktów bedzie po 2 wyswetli jeden wywal to

Ten post edytował acztery 4.12.2006, 09:22:34
Go to the top of the page
+Quote Post
nospor
post
Post #6





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




http://forum.php.pl/index.php?showtopic=36...mp;#entry204618
Go to the top of the page
+Quote Post
acztery
post
Post #7





Grupa: Zarejestrowani
Postów: 945
Pomógł: 7
Dołączył: 15.03.2005
Skąd: katowice

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


co do ceny po nie lepiej dać between wydawać się ze wlasnie do tego to jest
Go to the top of the page
+Quote Post
kononowicz
post
Post #8





Grupa: Zarejestrowani
Postów: 238
Pomógł: 0
Dołączył: 12.11.2006
Skąd: Białystok

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


Cytat(Sedziwoj @ 4.12.2006, 08:34:35 ) *
Jak używasz OR w zapytaniu to szuka jednego lub drugiego, ale jeśli dostajesz w odpowiedzi kilka takich samych rekordów to oznacza, że jest ich kilka w bazie.
Więc jak chcesz aby wyszukany towar spełniał dwa warunki mszą być połączone AND.
Ogólnie sprawdź co w ogóle jest w bazie, bo mam dziwne przeczucie, że jest tam ogromny bałagan.
I jak zawsze doradzam przeczytanie jakiegoś kursu i jeśli sam tworzyłeś tą bazę to również takiego gdzie jest opisane jak powinno się tworzyć takie bazy, bo tu można popełnić sporo błędów.



nie mam bałaganu (IMG:http://forum.php.pl/style_emoticons/default/snitch.gif) bo mam tylko kilka testowych rekordów.. a to że wyświetlało mi np. 6 po kazdym rekodzie i jezeli było znalezionych wiecej to na przemian to wina jakiegos błedu w kodzie.


Cytat(nospor @ 4.12.2006, 09:37:21 ) *


nie można tego zrobić prościej, czyli jedna linijką SQLa??



distinct juz usunałem ... sam na to wpadłem (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif)



faktycznie between to dobry pomysł. dzieki za rady

Ten post edytował kononowicz 4.12.2006, 12:13:08
Go to the top of the page
+Quote Post
nospor
post
Post #9





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




Cytat
nie można tego zrobić prościej, czyli jedna linijką SQLa??
Oczywiscie ze mozna, ale bedzie srednio czytelne (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif)
Go to the top of the page
+Quote Post
kononowicz
post
Post #10





Grupa: Zarejestrowani
Postów: 238
Pomógł: 0
Dołączył: 12.11.2006
Skąd: Białystok

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


Cytat(nospor @ 4.12.2006, 12:18:54 ) *
Oczywiscie ze mozna, ale bedzie srednio czytelne (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif)



a można otrzymać wskazówkę jak to zrobić??
Go to the top of the page
+Quote Post
nospor
post
Post #11





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




  1. <?php
  2. $wh = array();if (!empty($_POST['cena_od']))  $wh[] = 'cena >= '.$_POST['cena_od'];if (!empty($_POST['cena_do']))  $wh[] = 'cena <= '.$_POST['cena_do']; if (!empty($wh)) $where = 'where '.implode(' and ', $wh); else $where = ''; $sql = 'select ..... '.$where;
  3. ?>
i masz jedna linijke (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

A na powaznie. Nie ma co sie bawic w jednolinijkowce, gdyz naprawde jesli nawet ci sie uda cos poukladac, to nagle gdy bedziesz musial dolozyc warunkow to bedziesz mial powazny problem z zapanowaniem nad tym. Podany przeze mnie link umozliwia ci w ladny i przyjemny sposob zapanowac nad wszystkim. a to ze jest 5 linijek zamiast jednej.... bez przesady
Go to the top of the page
+Quote Post
kononowicz
post
Post #12





Grupa: Zarejestrowani
Postów: 238
Pomógł: 0
Dołączył: 12.11.2006
Skąd: Białystok

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


cos takiego naskrobałem:

  1. <?php
  2. echo'<form action="szukaj1.php" method="post">';
  3. echo "<br>wpisz towar <br>";
  4. echo'<input type="text" name="towary" id="towary" value="">';
  5. echo "<br>wpisz kod <br>";
  6. echo'<input type="text" name="kod" id="kod" value="">';
  7. echo "<br>zakres ceny <br> od:";
  8. echo'<input type="text" name="cena_od" id="cena_od" value="">';
  9. echo " do: ";
  10. echo'<input type="text" name="cena_do" id="cena_do" value="">';
  11. echo'<input type="submit" name="znajdz" value="znajdz">';
  12. echo'<input type="reset" value="wyczyść">';
  13. echo'</form>';
  14.  
  15. if(isset($_POST['znajdz']))
  16. {
  17. $wh = array();
  18. if (!empty($_POST['cena_od']))
  19.  $wh[] = 'CENA >= '.$_POST['cena_od'];
  20. if (!empty($_POST['cena_do']))
  21.  $wh[] = 'CENA <= '.$_POST['cena_do'];
  22. if (!empty($_POST['towary']))
  23.  $wh[] = 'TOWARY <= '.$_POST['towary'];
  24. if (!empty($_POST['kod']))
  25.  $wh[] = 'KOD <= '.$_POST['kod'];
  26.  
  27. if (!empty($wh))
  28.  $where = 'where '.implode(' and ', $wh);
  29. else
  30.  $where = '';
  31. $zapytanie = 'SELECT * FROM `towary` '.$where;
  32.  
  33.  echo "<table cellpadding="1" border=1>";
  34. echo "<tr>";
  35. echo "<td> towary </td>";
  36. echo "<td> kod </td>";
  37. echo "<td> cena </td>";
  38. echo "<td> działy </td>";
  39. echo "<tr>";
  40. while( $wiersz = mysql_fetch_array($zapytanie) )
  41. {
  42. echo "<tr>";
  43. echo "<td>".$wiersz['TOWARY']."</td>";
  44. echo "<td>".$wiersz['KOD']."</td>";
  45. echo "<td>".$wiersz['CENA']."</td>";
  46. echo "<td>".$wiersz['DZIALY']."</td>";
  47. echo "<tr>";
  48. }
  49. echo "</table>";
  50. }
  51. ?>


wyświetla:
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /home/*********/szukaj1.php on line 41

Ten post edytował kononowicz 4.12.2006, 14:11:17
Go to the top of the page
+Quote Post
nospor
post
Post #13





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




no ale kolego.... zapytanie to jeszcze trzeba wykonac. O mysql_query() slyszal?
Go to the top of the page
+Quote Post
kononowicz
post
Post #14





Grupa: Zarejestrowani
Postów: 238
Pomógł: 0
Dołączył: 12.11.2006
Skąd: Białystok

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


Cytat(nospor @ 4.12.2006, 14:11:38 ) *
no ale kolego.... zapytanie to jeszcze trzeba wykonac. O mysql_query() slyszal?


słyszał słyszał :

  1. <?php
  2. if(isset($_POST['znajdz']))
  3. {
  4.  
  5. $wh = array();
  6. if (!empty($_POST['cena_od']))
  7.  $wh[] = 'CENA >= '.$_POST['cena_od'];
  8. if (!empty($_POST['cena_do']))
  9.  $wh[] = 'CENA <= '.$_POST['cena_do'];
  10. if (!empty($_POST['towary']))
  11.  $wh[] = 'TOWARY <= '.$_POST['towary'];
  12. if (!empty($_POST['kod']))
  13.  $wh[] = 'KOD <= '.$_POST['kod'];
  14. print '<pre>';
  15. print_r($_POST);
  16. print '</pre>';
  17. //.....i tak na kazde pola czyli nie 64 a 8 razy :)
  18. if (!empty($wh))
  19.  $where = 'where '.implode(' and ', $wh);
  20. else
  21.  $where = '';
  22. $zapytanie = 'SELECT * FROM `towary` '.$where;
  23. $wynik = mysql_query($zapytanie);
  24. echo "<table cellpadding="1" border=1>";
  25. echo "<tr>";
  26. echo "<td> towary </td>";
  27. echo "<td> kod </td>";
  28. echo "<td> cena </td>";
  29. echo "<td> działy </td>";
  30. echo "<tr>";
  31. while( $wiersz = mysql_fetch_array($wynik) )
  32. {
  33. echo "<tr>";
  34. echo "<td>".$wiersz['TOWARY']."</td>";
  35. echo "<td>".$wiersz['KOD']."</td>";
  36. echo "<td>".$wiersz['CENA']."</td>";
  37. echo "<td>".$wiersz['DZIALY']."</td>";
  38. echo "<tr>";
  39. }
  40. echo "</table>";
  41. print '<pre>';
  42. print_r($_POST);
  43. print '</pre>';
  44. mysql_close($connection);
  45. }
  46. ?>


wyszukuje mi według ceny i kodu ale towaru jakos nie ...
Go to the top of the page
+Quote Post
nospor
post
Post #15





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




no ale co to jest to TOWARY? bo w warunku dales: TOWARY <= . to TOWARY to liczba i ma byc warunek <= ?
Z kodem zreszta podobnie.
Go to the top of the page
+Quote Post
kononowicz
post
Post #16





Grupa: Zarejestrowani
Postów: 238
Pomógł: 0
Dołączył: 12.11.2006
Skąd: Białystok

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


Cytat(nospor @ 4.12.2006, 14:26:17 ) *
no ale co to jest to TOWARY? bo w warunku dales: TOWARY <= . to TOWARY to liczba i ma byc warunek <= ?
Z kodem zreszta podobnie.


więc przy TOWARY i KOD zamiast <= powinno byc = lub LIKE (IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif)

TOWARY i KOD to pole w tabeli 'towary' ... to jest typ varchar


po wpisaniu LIKE pojawia sie takie cos:

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /home/*******szukaj1.php on line 63
towary kod cena działy

Array
(
[towary] => tow2
[kod] =>
[cena_od] =>
[cena_do] =>
[znajdz] => znajdz
)

1054Unknown column 'tow2' in 'where clause'

Ten post edytował kononowicz 4.12.2006, 14:39:36
Go to the top of the page
+Quote Post
nospor
post
Post #17





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




no tak, skoro to napis to powinien byc like, ale poprawny like...
  1. pole LIKE '%szukana fraza%'

I sobie dostosuj. Jakbys mial problemy to tu masz linka, ktorego dokladna analiza powinna ci pomoc:
http://pl.php.net/manual/pl/language.types.string.php
Go to the top of the page
+Quote Post
kononowicz
post
Post #18





Grupa: Zarejestrowani
Postów: 238
Pomógł: 0
Dołączył: 12.11.2006
Skąd: Białystok

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


nie mogęsobie poradzić.. jak wstawić % miedzy $towary?(IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif) ?

  1. <?php
  2. if(isset($_POST['znajdz']))
  3. {
  4. $towary = $_POST['towary'];
  5. $kod = $_POST['kod'];
  6.  
  7. $wh = array();
  8. if (!empty($_POST['cena_od']))
  9.  $wh[] = 'CENA >= '.$_POST['cena_od'];
  10. if (!empty($_POST['cena_do']))
  11.  $wh[] = 'CENA <= '.$_POST['cena_do'];
  12. if (!empty($_POST['towary']))
  13.  $wh[] = 'TOWARY LIKE '.$towary;
  14. if (!empty($_POST['kod']))
  15.  $wh[] = 'KOD LIKE '.$kod;
  16. ?>
Go to the top of the page
+Quote Post
nospor
post
Post #19





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




no ale przeciez to jest banalnie proste. poto dostales linka...
  1. <?php
  2. $wh[] = "TOWARY LIKE '%$towary%'";
  3. ?>

podobnie zrob z KODEM
Go to the top of the page
+Quote Post
kononowicz
post
Post #20





Grupa: Zarejestrowani
Postów: 238
Pomógł: 0
Dołączył: 12.11.2006
Skąd: Białystok

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


Cytat(nospor @ 4.12.2006, 15:41:51 ) *
no ale przeciez to jest banalnie proste. poto dostales linka...
  1. <?php
  2. $wh[] = "TOWARY LIKE '%$towary%'";
  3. ?>

podobnie zrob z KODEM


działa .. dziekuje bardzo...

Ten post edytował kononowicz 4.12.2006, 15:55:57
Go to the top of the page
+Quote Post

2 Stron V   1 2 >
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 - 06:36