Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [mySQL] UPDATE, zamiast nazwy kolmny jej numer
Forum PHP.pl > Forum > PHP
bulimaxiu
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
kszychu
Trochę to dziwne, może powiedz, do czego tego potrzebujesz?
matx132
  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:)
nevt
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.
bulimaxiu
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
matx132
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:)
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.