Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [mysql] Wstawianie pol do tabeli
skowron-line
post
Post #1





Grupa: Zarejestrowani
Postów: 4 340
Pomógł: 542
Dołączył: 15.01.2006
Skąd: Olsztyn/Warszawa

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


Witam.
Mam w bazie tabele w ktorej pola nazwy pol to:
Kod
1_0_0
1_2_1
2_0_0
2_2_1
2_3_1
2_4_1
4_0_0
4_1_1
4_2_1

i tak dalej az w nieskonczoność może tego być
i jak teraz chce wstawic pole o nazwie 3_0_0 ale za pole 2_4_1 (nie wiem czy napewno bedzie to to pole)
bo jeżeli bym wiedział to ,to by było proste
  1. ALTER TABLE `tbl_name` ADD COLUMN `3_0_0` tinyint(1) NOT NULL DEFAULT '0' AFTER `2_4_1`

a jeżeli nieznam tego pola po którym chcęwstawić (IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif)
Go to the top of the page
+Quote Post
sticker
post
Post #2





Grupa: Zarejestrowani
Postów: 611
Pomógł: 19
Dołączył: 28.02.2005
Skąd: Wrocław

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


jak nie wiesz po ktorym to na koniec albo na początek, imo beznadziejny pomysł konstrukcji bazy raczej zrób to jako tabelka custom fields ( o ile takie cos chcesz zrobic)
Go to the top of the page
+Quote Post
nospor
post
Post #3





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




Musisz najpierw przy pomocy php i mysql pobrać te pole za ktorym chcesz wstawic. Jakies sortowanie + kilka warunkow i juz.

Ale jak juz powidziano wczesniej: bezsensu ta struktura.
Go to the top of the page
+Quote Post
skowron-line
post
Post #4





Grupa: Zarejestrowani
Postów: 4 340
Pomógł: 542
Dołączył: 15.01.2006
Skąd: Olsztyn/Warszawa

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


Cytat
imo beznadziejny pomysł konstrukcji bazy

dlaczego (IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif)
Cytat
Ale jak juz powidziano wczesniej: bezsensu ta struktura.

dlaczego (IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif)
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




No bo co to za tabela, ktora moze zawierac w nieskonczonosc pol i na dodatek zmieniana dynamicznie.

Moze powiedz co chcesz zrobic, to moze da sie lepiej
Go to the top of the page
+Quote Post
skowron-line
post
Post #6





Grupa: Zarejestrowani
Postów: 4 340
Pomógł: 542
Dołączył: 15.01.2006
Skąd: Olsztyn/Warszawa

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


Jest to tabela z uprawnieniami liczby odpowiadaja kolejnym podstronom, w pola sa wstawiane wartosci od 1 do 5 co oznacza pozion dostepu do akcji na danej podstronie, ma ona byc zmieniana dynamicznie poniewaz automatycznie maja byc dodawane nowe podstrony i co za tym idzie musi byc stworzone pole w tabeli z uprawnieniami
Go to the top of the page
+Quote Post
Cezar708
post
Post #7





Grupa: Zarejestrowani
Postów: 1 116
Pomógł: 119
Dołączył: 10.05.2005
Skąd: Poznań

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


  1. <?php
  2. /* tu jaka kolumne chcesz wstawic */
  3. $doWstawienia = '3_9_1';
  4.  
  5. function mysql_fetch_all($result) {
  6.  while($row=mysql_fetch_array($result)) {
  7.  $return[] = $row;
  8.  }
  9.  return $return;
  10. }
  11. function getVal($str){
  12. $a = explode("_", $str);
  13. $ret = 0;
  14. $count = count($a);
  15. for( $i=$count-1, $j=0; $i>=0; $j=$count-$i, $i--){
  16. $ret += $a[$j] * pow(10,$i);
  17. }
  18. return $ret;
  19. }
  20. $valDoWstawienia = getVal($doWstawienia);
  21. $link = mysql_connect('****', '****', '***')
  22. or die('Connect error: ' . mysql_error());
  23. print ("conected\n");
  24. mysql_select_db("***") or die("db select error: ".mysql_error());
  25. print ("db selected\n");
  26.  
  27. // pobierasz info o tabelach
  28. $res = mysql_query("SHOW FIELDS FROM tbl_name;");
  29. $arrRes = mysql_fetch_all($res);
  30.  
  31. $after = '';
  32. foreach ( $arrRes as $field ){
  33. if ( getVal($field['Field']) < $valDoWstawienia ){
  34. $after = $field['Field'];
  35. } else {
  36. break;
  37. }
  38. }
  39.  
  40. if ( mysql_query("ALTER TABLE `tbl_name` ADD COLUMN `$doWstawienia` tinyint(1) NOT NULL default '0' AFTER `$after` ") ){
  41. echo "Poszlo dobrze";
  42. } else {
  43. echo "cos nie poszlo: ".mysql_error();
  44. }
  45. ?>


PS1: Nie sprawdzałem na warunkach brzegowych, więc ewentualnie sobie popraw jeśli jest jakiś błąd
PS2: Też uważam, że jeśli:
Cytat
i tak dalej az w nieskonczoność może tego być

... w jednej tabeli to znaczy, że można to jakoś inaczej rozwiązać

Pozdrawiam

Ten post edytował Cezar708 4.01.2008, 11:32:44
Go to the top of the page
+Quote Post
skowron-line
post
Post #8





Grupa: Zarejestrowani
Postów: 4 340
Pomógł: 542
Dołączył: 15.01.2006
Skąd: Olsztyn/Warszawa

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


No dobra z tym nieskonczenie wiele to moze przesadzilem ale moze tego byc ~150
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
Jest to tabela z uprawnieniami liczby odpowiadaja kolejnym podstronom, w pola sa wstawiane wartosci od 1 do 5 co oznacza pozion dostepu do akcji na danej podstronie, ma ona byc zmieniana dynamicznie poniewaz automatycznie maja byc dodawane nowe podstrony i co za tym idzie musi byc stworzone pole w tabeli z uprawnieniami
I wlasnie dlatego ta struktura tabeli jest bezsensu.

Powinna byc tabela, ktora ma pola: strona, uprawnienie.
Jej rekordy by zawieraly odpowiednio: id strony i uprawnienie dla niej.
Go to the top of the page
+Quote Post
skowron-line
post
Post #10





Grupa: Zarejestrowani
Postów: 4 340
Pomógł: 542
Dołączył: 15.01.2006
Skąd: Olsztyn/Warszawa

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


Cytat
Jej rekordy by zawieraly odpowiednio: id strony i uprawnienie dla niej.

okej to taka tez mam a co jezeli chodzi o uzytkownikow (IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif)
Kod
tabela personel_uprawnienia_schemat
->id
->upr
->nazwa_upr
->pozycja
->url

i
Kod
tabela personel_uprawnienia
->id_personelu
->data_aktualizacji
-> i tu pola 1_0_0 i tak dalej
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




O uzytkownikach nie wpsominales na poczatku (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)

NO to dodaj jeszcze pole user_id i po sprawie. Wtedy dany rekord bedzie mowil, ze taki user ma takie prawo do takiej strony
Go to the top of the page
+Quote Post
skowron-line
post
Post #12





Grupa: Zarejestrowani
Postów: 4 340
Pomógł: 542
Dołączył: 15.01.2006
Skąd: Olsztyn/Warszawa

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


Cytat(nospor @ 4.01.2008, 11:59:06 ) *
O uzytkownikach nie wpsominales na poczatku (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)

NO to dodaj jeszcze pole user_id i po sprawie. Wtedy dany rekord bedzie mowil, ze taki user ma takie prawo do takiej strony

@Nospor bo ja nie pytalem w 1 poscie o to czy tabela jest poprawna czy nie chcialem sie dowiedziec jak wstawic pole przed inne pole, owszem uzyskalem odpowiedz ale po co byla ta krytyka skoro nikt niewiedzial po co to jest ta tabela.
Taki system działa juz 3rok i sprawdza sie, wiec nie ma potrzeby go zmieniac tylko ulepszac stad dynamiczne dodawanei pol do tabeli wczesniej ktos to robil ręcznie.

peace i dzieki za odpowiedzi
Go to the top of the page
+Quote Post
Cezar708
post
Post #13





Grupa: Zarejestrowani
Postów: 1 116
Pomógł: 119
Dołączył: 10.05.2005
Skąd: Poznań

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


Trochę muszę się zgodzić ze skowron-line, często systemy pracują po kilka lat, pamiętają nawet czasy php3.
Wyobraźcie sobie że miałem ostatnio `przyjemność` konserwacji systemu napisanego przez studentów w php3 ładnych kilka lat temu. Były tam konstrukcję, które wołają o pomstę do nieba, a mimo wszystko inwestor nie chce słyszeć o przepisaniu systemu, bo "dobrze działa, więc po co?". Gorzej, gdy dostałem zlecenie dopisania jakiegoś małego czegoś do tej całej paplaniny kodów... lepiej nie pytać co się robi aby szybko coś napisać i zapomnieć o tym co się napisało.

Pewnie w podobnej sytuacji jest Skowron musi on reanimować jakiś archaik, stad taki problem. Bo w przeciwnym wypadku wymagało by wszystko przepisania dużej ilości kodu i zmiany struktury bazy danych, na co zwykle nie ma czasu, chęci, pieniędzy... no i nie wiadomo jak zachowają się inne części systemu po takiej przeróbce.

Przepraszam za taki mały off topic.

Pozdrawiam
Go to the top of the page
+Quote Post
nospor
post
Post #14





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




Ale panowie, skowron-online nie pisal ze musi dorabiac nową funkcjionalnosc do dzialajacego od trzech lat systemu. Większość osob jak ocos tutaj pyta, to dopiero zaczyna pisac projekt i nalezy im wytlumaczyc, ze robią to źle.
Pozatym Skowron sam zapytal czemu uwazamy ze ten system jest zly, wiec wyjasnilem i dziwi mnie taki ton ostatniej jego wypowiedzi.

A nawet jesli system dziala 3 lata to nigdy nie zaszkodzi go poprawic (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
Go to the top of the page
+Quote Post
skowron-line
post
Post #15





Grupa: Zarejestrowani
Postów: 4 340
Pomógł: 542
Dołączył: 15.01.2006
Skąd: Olsztyn/Warszawa

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


Żeby rozwiać pewne niejasności, bo za chwile beda toczone spory.
Sytuacja jest taka ze pracuje w firmie w której już istniał już system i moim zadaniem jest rozwijanie go i dopisywanie nowych modułów i integracja ich z istniejącym systemem.
Do dnia jutrzejszego menu gorne i dolne bylo wpisywane z palca do bazy i do 3 plikow, ja to przerobilem i wszystko generuje sie z bazy i zamiast 400 lini kodu mam 90. i wszystko dziala jak nalezy + kilka poprawek

Ten post edytował skowron-line 4.01.2008, 13:07:51
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: 24.08.2025 - 22:45