Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [mysql] Wstawianie pol do tabeli
Forum PHP.pl > Forum > Bazy danych > MySQL
skowron-line
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ć questionmark.gif
sticker
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)
nospor
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.
skowron-line
Cytat
imo beznadziejny pomysł konstrukcji bazy

dlaczego questionmark.gif
Cytat
Ale jak juz powidziano wczesniej: bezsensu ta struktura.

dlaczego questionmark.gif
nospor
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
skowron-line
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
Cezar708
  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
skowron-line
No dobra z tym nieskonczenie wiele to moze przesadzilem ale moze tego byc ~150
nospor
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.
skowron-line
Cytat
Jej rekordy by zawieraly odpowiednio: id strony i uprawnienie dla niej.

okej to taka tez mam a co jezeli chodzi o uzytkownikow 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
nospor
O uzytkownikach nie wpsominales na poczatku 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
skowron-line
Cytat(nospor @ 4.01.2008, 11:59:06 ) *
O uzytkownikach nie wpsominales na poczatku 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
Cezar708
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
nospor
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 winksmiley.jpg
skowron-line
Ż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
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.