Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [mySQL] UPDATE, zamiast nazwy kolmny jej numer
bulimaxiu
post 20.06.2008, 08:13:29
Post #1





Grupa: Zarejestrowani
Postów: 83
Pomógł: 0
Dołączył: 18.06.2008
Skąd: Reda

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


Witam.

Napotkałem w skrypcie potrzebę stworzenia zapytania do bazy mySQL w stylu:
UPDATE `baza` SET $numer_kolumny = '$row[$numer_kolumny]'

Normalnie jest
UPDATE `baza` SET `$nazwa_kolumny` = '$row[$numer_kolumny]'

Czy ktoś może wie czy i jak można stworzyć zapytanie, żeby zawierało numer kolumny w bazie a nie jej nazwę?

Wprawdzie widać niby proste rozwiązania jak np.
  1. nazwać kolumny ich numerami, ale to rozwiązanie ostateczne i nie praktyczne w tym przypadku (nazwy kolumn r1m01c1, r1m01c3, r1m02c1, r1m02c3 itd.)
  2. zrobić array [$numer_kolumny, $nazwa_kolumny] i potem z niej pobierać nazwy.
  3. zrobić funkcję konstrującą nazwę kolumny (tylko po co serwer dociążać).
ale przed którąś z tych opcji chciałbym najpierw dowiedzieć się czy sama baza nie ma metody wprost; oszczędziło by to trochę pamięci i procków serwera.

Analogicznie sprawa dotyczy również
SELECT * FROM bazy_konserwy_GDN WHERE $numer_kolumny = '$ID' LIMIT 1
oraz
SELECT $numer_kolumny_begin $numer_kolumny_end FROM bazy_konserwy_GDN WHERE $numer_kolumny = '$ID' LIMIT 1

Pozdrawiam.
Sebastian

Tymczasowo stworzono funkcję tworzącą nazwę kolumny w oparciu o jej numer, ale jeśli ktoś odpowie, będę wdzięczny.

pozdrawiam.
Sebastian

Ten post edytował bulimaxiu 18.06.2008, 11:08:36
Go to the top of the page
+Quote Post
kszychu
post 20.06.2008, 08:51:35
Post #2





Grupa: Przyjaciele php.pl
Postów: 2 712
Pomógł: 23
Dołączył: 27.10.2003
Skąd: z kontowni

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


Trochę to dziwne, może powiedz, do czego tego potrzebujesz?


--------------------
"Coś się kończy, coś się zaczyna." Andrzej Sapkowski
Go to the top of the page
+Quote Post
matx132
post 20.06.2008, 13:51:35
Post #3





Grupa: Zarejestrowani
Postów: 243
Pomógł: 19
Dołączył: 12.09.2005

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


  1. <?php
  2. mysql_query("Update mapa".$i." SET gracz='matx132132' where gracz='matx132' ");
  3. ?>


jak zrobiłem zapytanie takie w php to w mysql widział to tak

  1. <?php
  2. Update mapa2 SET gracz='matx132132' where gracz='matx132';
  3. ?>


jesli o to ci chodziło:)
Go to the top of the page
+Quote Post
nevt
post 20.06.2008, 15:20:26
Post #4





Grupa: Przyjaciele php.pl
Postów: 1 595
Pomógł: 282
Dołączył: 24.09.2007
Skąd: Reda, Pomorskie.

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


jeżeli koniecznie chcesz zachować przejrzyste nazwy kolumn (co zrozumiałe) i jednocześnie potrzebujesz się do nich odwoływać przez numery, to możesz do tej tabeli zdefiniować sobie odpowiedni widok, np:
  1. CREATE TABLE `baza`.`tabela` (`glowne_id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT, `wartosc` varchar(45) NOT NULL, PRIMARY KEY (`glowne_id`));

i do tego widok:
  1. CREATE OR REPLACE VIEW `baza`.`widok` AS SELECT `glowne_id` AS `c01`, `wartosc` AS `c02` FROM `baza`.`tabela`';

powodzenia.


--------------------

-
Oh no, my young coder. You will find that it is you who are mistaken, about a great many things... -
Go to the top of the page
+Quote Post
bulimaxiu
post 20.06.2008, 19:03:25
Post #5





Grupa: Zarejestrowani
Postów: 83
Pomógł: 0
Dołączył: 18.06.2008
Skąd: Reda

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


Witajcie.

Dziękuję krzychu, ale to niesety chyba nie to, o co mi chodziło.

matx132: Właśnie zamiast "gracz" chciałem najprościej podać numer zamiast jej nazwy.

Zamiast:
  1. "Update mapa".$i." SET gracz='matx132132' where gracz='matx132' "

  1. "Update mapa".$i." SET row[30]='matx132132' where gracz='matx132' "

Do czego to potrzebuję? Chciałem mocno uprościć kod w skrypcie typu:
  1. <?php
  2. <table><tr>
  3. for ($a=1; $a<=24, $a++) {
  4.  <td><input type="checkbox" name="$a" value="0" onclick="window.open('do_update.php?rowx=$a&rowxval=1"></td>
  5. }
  6. </tr></table>
  7. ?>

gdzie w do_update.php jest
  1. UPDATE `baza` SET row[$a]` = '$rowxval' WHERE ID = '$ID' LIMIT 1 "

a w bazie jak już wspomniałem kolumny ponazywane wg potrzeby przejrzystości.

Obecnie zrobiłem funkcję, która wykonuje się 24 razy przy każdym rekordzie, których będzie finalnie około 200.
  1. <?php
  2. Function OkreslNazweKolumny ($numer_kolumny) {
  3.  # Tworzenie nazwy komorki w oparciu o jej numer kolejny
  4.  # $numer_kolumny - numer kolumny danych gdzie 1 to 'r1m01c1' a 24 to 'r1m12c3'.
  5.  
  6. $miesiac = round($numer_kolumny/2);
  7.  if ($miesiac < 10) {
  8.  $miesiac = "0".$miesiac;
  9.  }
  10. if ($numer_kolumny/<> round($numer_kolumny/2)) {
  11.  $rozszerzenie = "c1";
  12. } else {
  13.  $rozszerzenie = "c3";
  14. }
  15. $nazwa_kolumny_wybranej = "r1m$miesiac".$rozszerzenie;
  16. return "r1m$miesiac".$rozszerzenie;
  17. }
  18. ?>

więc trochę to liczenia sprzęcior ma.

Pozdrawiam.
Sebastian
Go to the top of the page
+Quote Post
matx132
post 20.06.2008, 19:52:29
Post #6





Grupa: Zarejestrowani
Postów: 243
Pomógł: 19
Dołączył: 12.09.2005

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


jesli tak chcesz to ja to zrobiłem tak:D

i oczywiscie działa:)

  1. <?php
  2. $con = @mysql_pconnect("localhost","root","*****");
  3. @mysql_select_db("baza",$con);
  4. $a=$_GET['a'];
  5. $c=$_GET['c'];
  6. $id=$_GET['id'];
  7. if ($a !='')
  8.  {
  9. $b = $a%2;
  10. if ($b==1)
  11. {
  12.  $d=($a+1)/2;
  13.  mysql_query("UPDATE baza SET r1m0".$d."c1='".$c."' WHERE ID = '".$id."' LIMIT 1 ") ;
  14. }
  15. Else
  16. {
  17. $a=$a/2;
  18.  mysql_query("UPDATE baza SET r1m0".$a."c3='".$c."' WHERE ID = '".$id."' LIMIT 1 " );
  19.  
  20. }
  21.  }
  22. ?>


i wtedy jak podasz
np
http://mojastrona.pl/?a=10&c=5&id=1

wyjdzie takie coś

  1. <?php
  2. UPDATE baza SET r1m05c3='5' WHERE ID = '1' LIMIT 1
  3. ?>


chyba oto chodziło:)?

zdaje mi się ze mój skrypt powinien mieć mniejsze obciążenie serwera niż ten podany wyzej:)
i działa na każda liczbę kolumn:)

Ten post edytował matx132 20.06.2008, 19:55:35
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 19.07.2025 - 19:14