Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Konstrukcja zapytania do bazy MySQL
Forum PHP.pl > Forum > PHP
Fallout
Witam,

Nie jestem pewien czy ten post nadaje sie do php czy do MySql ale w sumie obydwa są powiązane ze soba nierozlacznie wiec nie krzyczec jakby co tongue.gif

mam taka funkcje:

  1. <?php
  2.  
  3. function _zmien()
  4. {
  5. $co = func_get_arg(0);
  6.  $id = func_get_arg(1);
  7.  $stare = func_get_arg(2);
  8.  $nowe = func_get_arg(3);
  9.  
  10. switch ($co)
  11. {
  12.  case 'cechy':
  13.  $sql = &#092;"UPDATE $co SET (nazwa_cechy = $nowe WHERE nazwa_cechy = $stare AND id_cn = $id\";
  14.  break;
  15.  
  16.  case 'producenci':
  17.  break;
  18. }
  19.  
  20.  include 'config.inc.php';
  21.  $p = mysql_connect($host,$user,$pass)   or Die($blad['E_BASE']);
  22.  $db = mysql_select_db($baza,$p)  or Die($blad['E_DB']);
  23.  $wynik = mysql_query($sql,$p)  or Die($blad['E_QUERY_UPD']);
  24. }
  25.  
  26. ?>


Do tej funkcji jest np takie odwolanie:

  1. <?php
  2.  
  3. (...)
  4.  case 'upd':
  5.  {
  6. $tab_nazwy = $_POST['nazwy'];
  7. $tab_dane = $_POST['dane'];
  8. $tab_idx = $_POST['idx'];
  9. foreach ($tab_nazwy as $index => $wartosc)
  10. {
  11. $oryg = $tab_dane[$index];
  12. $id = $tab_idx[$index];
  13. if ($oryg!=$wartosc) _zmien($co,$id,$oryg,$wartosc);
  14. //echo \"ID: $id, Było: $oryg , Jest: $wartosc\".\"n\";
  15. }
  16.  }
  17.  break;
  18. (...)
  19.  
  20. ?>


Dodam ze:
- zmienna $co zwraca nazwe tabeli do ktorej maja byc zaktualizowane dane
- zmienna $id daje nam numer wiersza w tabeli
- zmienna $stare zwraca stara wartosc danego pola w bazie (w niej jedyna nadzieja)
- zmienna $nowe zwraca nowa wartosc tego pola (moze byc takze jako nowe id)

Szkopul tkwi w tym, ze nie wiem jak zadac/sformulowac zapytanie do bazy aby aktualizowalo mi te pola ktore maja wartosc $stare o nowa wartosc $nowe. Problem w tym ze np tabela cechy (id_cn, nazwa_cechy) to wiadomo co gdzie bedzie ale juz
np w tabeli producenci (id_producent, nazwa, www, foto) nie wszystkie dane moga byc aktualizowane...

Mam nadzieje ze zrozumiale nakreśliłem mój problem, jeśli jakies watpliwości, lub potrzebne wycinki kodu to wrzuce (nie chcialem tutaj wrzucac prawie 600 lini kodu smile.gif )

Z gory dziekuje za (p)odpowiedzi..
Marcin
SongoQ
Jak dobrze zrozumialem chesz zaktualizowac pole gdzie jest odpowienia wartosc "stare" o wartosc "nowe".

Wiec SQL powienien tak wygaldac

  1. <?php
  2. $sql = 'UPDATE '.$co.' SET nazwa_cechy = '.$nowe.' WHERE nazwa_cechy = '.$stare.' ';
  3. ?>


Niepotrzebne jest wtedy ID.

Mam nadzieje ze dobrze zrozumialem problem
Fallout
Niestety, na takie cos to nawet bym nie zaśmiecał forum winksmiley.jpg

Zapewne zasegurowales sie tym:

  1. <?php
  2. $sql = &#092;"UPDATE $co SET (nazwa_cechy = $nowe WHERE nazwa_cechy = $stare AND id_cn = $id\";
  3. ?>


ale to jest proste...

mi chodzi o raczej cos takiego (napewno zle ale to przyklad tongue.gif)

  1. <?php
  2.  
  3. switch ($co)
  4. {
  5.  case 'producenci':
  6. {
  7.  $zapytanie = &#092;" 
  8. (WHERE id_producent=$stare SET id_producent=$nowe) OR
  9. (WHERE nazwa=$stare SET nazwa=$nowe) OR
  10. (WHERE www=$stare SET www=$nowe) OR
  11. (WHERE foto=$stare SET foto=$nowe)&#092;"; 
  12. }
  13.  breakl
  14.  
  15.  case 'cechy':
  16.  {
  17. $zapytanie =&#092;"
  18. (WHERE id_cn = $stare SET id_cn = $nowe) OR
  19. (WHERE nazwa_cechy = $stare SET nazwa_cechy = $nowe)&#092;";
  20.  }
  21.  break;
  22.  
  23.  case (....)
  24.  i tak dalej...
  25.  
  26. }
  27.  
  28.  
  29.  
  30. $sql = &#092;"UPDATE $co SET $zapytanie\";
  31.  
  32. ?>


mam nadzieje ze na tym przykladzie widac o co mi chodzi smile.gif
pozdro
SongoQ
No teraz zrozumialem o co chodzi. Chcesz w 1 zapytaniu modyfikowac pola w ktorych wartosci odpowiadaja starym wartosciom.

Nie bardzo przychodzi mi do glowy jak to zrealizowac za pomoca 1 zapytania.

Mozna zastasowac kilka zapytań i wtedy modyfikujesz pola z wybranych warunkow.

Tak na szybko tylko to mi przychodzi do glowy.

A moze CASE questionmark.gif
kszychu
A przekazuj sobie jeszcze zmienną $nazwa_kolumny i po kłopocie.
Fallout
Cytat(kszychu @ 2005-02-24 16:41:25)
A przekazuj sobie jeszcze zmienną $nazwa_kolumny i po kłopocie.

no taki smile.gif normalnie na to nie wpadlem biggrin.gif

jakbym mogl to bym sobie przekazywal chyba ze pomozecie mi tak zmodyfikowac inny kod z ktorego sa te zmienne biggrin.gif

oto on:

funckja rysujaca tabelke:

  1. <?php
  2.  
  3. function upd_form($co)
  4. {
  5. echo &#092;"<table border=\"1\"><tr align=\"center\"><td><form action=\"tabele.php?co=$co&akcja=upd\" method=\"POST\">\"; include 'config.inc.php';
  6. require 'config.inc.php';
  7. $p = mysql_connect($host,$user,$pass)  or Die ($blad['E_BASE']);
  8. $db  = mysql_select_db($baza,$p)  or Die ($blad['E_DB']);
  9. $sql  = &#092;"SELECT * FROM $co\";
  10. $wynik  = mysql_query($sql,$p)  or Die ($blad['E_QUERY_GET']);
  11. require 'tabs.inc.php';
  12. echo (get_tab_start($co,2));
  13. switch ($co)
  14. {
  15. case 'cechy':
  16. {
  17. while ($wiersz = mysql_fetch_array($wynik))
  18. {
  19. $id_cn = $wiersz['id_cn'];
  20.  $nazwa_cechy = $wiersz['nazwa_cechy'];
  21. echo (get_tab_end($co,2,$id_cn,$nazwa_cechy));
  22. }
  23. }
  24.  break;
  25.  
  26. case 'producenci':
  27. {
  28. while ($wiersz = mysql_fetch_array($wynik))
  29. {
  30. $id_producent = $wiersz['id_producent'];
  31.  $nazwa = $wiersz['nazwa'];
  32. $www = $wiersz['www'];
  33. $foto = $wiersz['foto'];
  34. echo (get_tab_end($co,2,$id_producent,$nazwa,$www,$foto));
  35. }
  36. }
  37. break;
  38. }
  39. echo &#092;"</table>\";
  40. echo &#092;"<table border=\"1\" width=\"100%\"><tr align=\"center\"><td><input type=\"submit\" value=\"Zapisz zmiany\"></td></tr></table></td></tr></table></form>\";
  41.  
  42. ?>


a to funckje je wypelniajace :

  1. <?php
  2. function get_tab_end()
  3. {
  4. include 'config.inc.php';
  5.  
  6. $co  = func_get_arg(0);
  7. $opcja = func_get_arg(1); // 1- kasowanie 2- aktualizacja
  8. $wiersz_id = func_get_arg(2);
  9. $td  = '';
  10. $del_td = &#092;"<td align=center><input type=checkbox name=del[] value=$wiersz_id></td>\";
  11. $end_tr = &#092;"</tr>\";
  12. // input do aktualizacji
  13. $nazwa_pola  = '';
  14. $wartosc_pola  = '';
  15.  
  16. switch ($co)
  17. {
  18. case 'cechy':
  19. case 'jm':
  20. case 'vat':
  21. {
  22. switch ($opcja)
  23. {
  24. case 0:
  25. case 1:
  26.  {
  27.  $td =  &#092;"<tr align=center>
  28.  <td>&#092;".func_get_arg(2).\"</td>
  29.  <td>&#092;".func_get_arg(3).\"</td>\";
  30.  }
  31. break;
  32.  
  33. case 2:
  34. {
  35.  $td = &#092;"<tr align=\"center\">\";
  36. $id_pola = func_get_arg(2);
  37. for ($i=2; $i<func_num_args(); $i++)
  38. {
  39.  $nazwa_pola  = func_get_arg($i);
  40.  $wartosc_pola  = func_get_arg($i);
  41. $input = &#092;"<td><input type=\"text\"  name=\"nazwy[]\" value=\"$wartosc_pola\"></td>\";
  42. $input .= &#092;"<input type=\"hidden\"  name=\"dane[]\" value=\"$nazwa_pola\">\";
  43. $input .= &#092;"<input type=\"hidden\"  name=\"idx[]\"  value=\"$id_pola\">\";
  44.  $td .= $input;
  45. $td .= &#092;"n\";
  46. }
  47. }
  48. break;
  49. }
  50. }
  51. break;
  52.  
  53. case 'producenci':
  54. {
  55. switch ($opcja)
  56. {
  57.  
  58.  case 0:
  59.  case 1:
  60.  {
  61.  $td =  &#092;"<tr align=\"center\">
  62.    <td>&#092;".func_get_arg(2).\"</td>
  63. <td>&#092;".func_get_arg(3).\"</td>
  64. <td>&#092;".func_get_arg(4).\"</td>
  65. <td><img src=&#092;"$img_prod_root\".func_get_arg(5).\"\"></td>\";
  66.  }
  67.  break;
  68.  
  69.  case 2:
  70.  {
  71.  $td = &#092;"<tr align=\"center\">\";
  72. $id_pola = func_get_arg(2);
  73. for ($i=2; $i<func_num_args(); $i++)
  74. {
  75.  $nazwa_pola  = func_get_arg($i);
  76.  $wartosc_pola  = func_get_arg($i);
  77. $input = &#092;"<td><input type=\"text\"  name=\"nazwy[]\" value=\"$wartosc_pola\"></td>\";
  78. $input .= &#092;"<input type=\"hidden\"  name=\"dane[]\" value=\"$nazwa_pola\">\";
  79. $input .= &#092;"<input type=\"hidden\"  name=\"idx[]\"  value=\"$id_pola\">\";
  80.  $td .= $input;
  81. $td .= &#092;"n\";
  82. }
  83.  }
  84.  break;
  85. }
  86.  
  87. }
  88. break;
  89. }
  90. switch ($opcja)
  91. {
  92. // bez zmian
  93. case 0:
  94. {
  95. $td .= $end_tr;
  96. }
  97. break;
  98. // skasowac
  99. case 1:
  100. {
  101. $td .= $del_td;
  102. $td .= $end_tr;
  103. }
  104. break;
  105.  
  106. }
  107. return $td;
  108. }
  109.  
  110. function get_tab_start()
  111. {
  112. $th = '';
  113. $del_th  = &#092;"<th>Skasować?</th>\";
  114. $end_th  = &#092;"</tr>\";
  115. $co  = func_get_arg(0);
  116. $opcja  = func_get_arg(1);
  117. switch ($co)
  118. {
  119. case 'cechy':
  120.  $th = &#092;"<table border=\"1\">
  121. <tr>
  122. <th><a href=&#092;"tabele.php?co=cechy&akcja=pokaz&jak=id_cn\">ID</a></th>
  123. <th><a href=&#092;"tabele.php?co=cechy&akcja=pokaz&jak=nazwa_cechy\">Nazwa Cechy</a></th>\";
  124.  
  125. break;
  126.  
  127. case 'producenci':
  128. $th = &#092;"<table border=\"1\">
  129. <tr>
  130. <th><a href=&#092;"tabele.php?co=producenci&akcja=pokaz&jak=id_producent\">ID</a></th>
  131. <th><a href=&#092;"tabele.php?co=producenci&akcja=pokaz&jak=nazwa\">Nazwa Producenta</a></th>
  132. <th><a href=&#092;"tabele.php?co=producenci&akcja=pokaz&jak=www\">Adres WWW</a></th>
  133. <th>Logo</th>&#092;";
  134. break;
  135.  
  136. case 'jm':
  137. $th = &#092;"<table border=\"1\">
  138. <tr>
  139. <th><a href=&#092;"tabele.php?co=jm&akcja=pokaz&jak=id_jm\">ID</a></th>
  140. <th><a href=&#092;"tabele.php?co=jm&akcja=pokaz&jak=jednostka\">Jednostka Miary</a></th>\";
  141. break;
  142.  
  143. case 'vat':
  144. $th = &#092;"<table border=\"1\">
  145. <tr>
  146. <th><a href=&#092;"tabele.php?co=vat&akcja=pokaz&jak=id_vat\">ID</a></th>
  147. <th><a href=&#092;"tabele.php?co=vat&akcja=pokaz&jak=stawka\">Stawka VAT</a></th>\";
  148. break;
  149.  
  150.  
  151.  
  152. }
  153. switch ($opcja)
  154. {
  155. // bez zmian
  156. case 0:
  157. {
  158. $th .= $end_th;
  159. }
  160. break;
  161. // skasowac
  162. case 1:
  163. {
  164. $th .= $del_th;
  165. $th .= $end_th;
  166. }
  167. break;
  168. }
  169. return $th;
  170. }
  171.  
  172.  
  173. ?>


czy teraz widac ze to nie takie proste?questionmark.gif?
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.