skowron-line
4.01.2008, 10:56:22
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
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ć
sticker
4.01.2008, 11:03:05
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
4.01.2008, 11:08:11
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
4.01.2008, 11:12:42
Cytat
imo beznadziejny pomysł konstrukcji bazy
dlaczego

Cytat
Ale jak juz powidziano wczesniej: bezsensu ta struktura.
dlaczego
nospor
4.01.2008, 11:14:25
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
4.01.2008, 11:20:04
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
4.01.2008, 11:31:23
<?php
/* tu jaka kolumne chcesz wstawic */
$doWstawienia = '3_9_1';
function mysql_fetch_all($result) {
$return[] = $row;
}
return $return;
}
function getVal($str){
$ret = 0;
for( $i=$count-1, $j=0; $i>=0; $j=$count-$i, $i--){
$ret += $a[$j] * pow(10,$i);
}
return $ret;
}
$valDoWstawienia = getVal($doWstawienia);
// pobierasz info o tabelach
$arrRes = mysql_fetch_all($res);
$after = '';
foreach ( $arrRes as $field ){
if ( getVal($field['Field']) < $valDoWstawienia ){
$after = $field['Field'];
} else {
break;
}
}
if ( mysql_query("ALTER TABLE `tbl_name` ADD COLUMN `$doWstawienia` tinyint(1) NOT NULL default '0' AFTER `$after` ") ){ } else {
}
?>
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
4.01.2008, 11:34:33
No dobra z tym nieskonczenie wiele to moze przesadzilem ale moze tego byc ~150
nospor
4.01.2008, 11:34:36
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
4.01.2008, 11:39:09
Cytat
Jej rekordy by zawieraly odpowiednio: id strony i uprawnienie dla niej.
okej to taka tez mam a co jezeli chodzi o uzytkownikow

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
4.01.2008, 11:59:06
O uzytkownikach nie wpsominales na poczatku

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
4.01.2008, 12:02:35
Cytat(nospor @ 4.01.2008, 11:59:06 )

O uzytkownikach nie wpsominales na poczatku

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
4.01.2008, 12:16:39
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
4.01.2008, 12:30:08
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
skowron-line
4.01.2008, 13:07:37
Ż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.