Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

2 Stron V   1 2 >  
Reply to this topicStart new topic
> Dynamiczne tworzenie tabel
dgaleza
post 29.09.2006, 10:59:02
Post #1





Grupa: Zarejestrowani
Postów: 21
Pomógł: 0
Dołączył: 29.09.2006

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


Muszę stworzyć dynamicznie kilka tabel, których nazwa będzie zależna od ID dodawanego wiersza do innej tabeli.
W warunku if dodałem zmienną
  1. <?php
  2. $sql = "CREATE TABLE $id (uczen_ID TEXT NOT NULL, oceny TEXT NOT NULL, sr TEXT NOT NULL, np TEXT NOT 
    NULL)"
    ;
  3. ?>

Poza warunkiem if dodałem instrukcję:
  1. <?php
  2. ?>

Niestety nowa tabela nie jest utworzona sadsmiley02.gif . Co robię źle?questionmark.gif

Pozdrawiam
dgaleza
Go to the top of the page
+Quote Post
nospor
post 29.09.2006, 11:02:27
Post #2





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




$id to liczba? Nazwa tabeli nie moze byc liczbą.

Proponuje jednak zmiane struktury.
Jedna tabela, ktora zawiera to co kazda tabela co chcesz stworzyc, ale dodac pole identyfikujace ucznia i juz.
PO co dla kazdego walic inna tabele?


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

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
dgaleza
post 29.09.2006, 12:43:06
Post #3





Grupa: Zarejestrowani
Postów: 21
Pomógł: 0
Dołączył: 29.09.2006

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


Z początku też myślałem, że nazwą tabeli nie może być liczba, ale się okazało przy ręcznym tworzeniu tabeli, że jest w stanie taką właśnie tabelę stworzyć.
Zmienię $id na $przedmiot. Wtedy nazwa tabeli będzie równoznaczna z nazwą przedmiotu który obsługuje.

Nie tworzę osobnych tabel dla każdego ucznia, tylko dla kazdego przedmiotu. Przedmioty dodaje się na specjalnej liście wraz z nazwiskami nauczycieli. Chciałem, by podczas tworzenia przedmiotu tworzyła się tabela o nazwie=ID dodawanego wiersza

Spróbuję zmienić tą nazwę tabeli i opisze swoje poczynania.



Poprawiłem, ale i tak nie działa sadsmiley02.gif
Wygląda to tak:
  1. <?php
  2. $sql = "CREATE TABLE ".$_POST['przedmiot']." (uczen_ID TEXT NOT NULL, oceny TEXT NOT NULL, sr TEXT NOT NULL, np TEXT NOT 
    NULL)"
    ;
  3.  $wynik = mysql_query ($query);
  4. }}
  5.  
  6. //pobierz tabele
  7. $wynik = mysql_query ("SELECT * FROM lekcje ORDER BY ob DESC;") or die ("Blad w pytaniu");
  8. print "<TABLE BORDER=1>";
  9. print "<tr><td><b>Przedmiot</b></td><td><b>Nazwisko i imię</b></td></tr>";
  10.  mysql_query ($sql);
  11. ?>
Go to the top of the page
+Quote Post
nospor
post 29.09.2006, 12:44:52
Post #4





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




Cytat
Z początku też myślałem, że nazwą tabeli nie może być liczba, ale się okazało przy ręcznym tworzeniu tabeli, że jest w stanie taką właśnie tabelę stworzyć.
hmmm, mi nie byl w stanie tego stworzyc.

Cytat
Nie tworzę osobnych tabel dla każdego ucznia, tylko dla kazdego przedmiotu.
Chodzilo mi bardziej o idee, a nie oto czy to osobna tabela na ucznia czy na przedmiot.
Po co tworzyc osobne tabele na cos, co mozna w jednej zapisac? Tak sie nie robi.


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

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
qbatoja
post 29.09.2006, 13:23:19
Post #5





Grupa: Zarejestrowani
Postów: 52
Pomógł: 0
Dołączył: 3.05.2005

Ostrzeżenie: (10%)
X----


A oplaczyles sie z baza danych i wybrales odpowiednia baze?

  1. <?php
  2. $db_host = 'localhost';
  3. $db_user = 'root';
  4. $db_password = '';
  5. $db_name = 'my_db'; //nazwa twojej tabeli
  6. $db = mysql_connect($db_host, $db_user, $db_password);
  7. if(!$db)
  8. {
  9. echo('Nie można połączyć się z bazą danych. Host: ' . $db_host);
  10. }
  11. mysql_query('USE ' . $db_name);
  12. {
  13. echo('Podana baza nie istnieje. Nazwa: ' . $db_name);
  14. }
  15. ?>


Ten post edytował qbatoja 29.09.2006, 13:24:16
Go to the top of the page
+Quote Post
dgaleza
post 29.09.2006, 18:20:07
Post #6





Grupa: Zarejestrowani
Postów: 21
Pomógł: 0
Dołączył: 29.09.2006

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


Łącze się z bazą danych, ponieważ dodaję rekordy do tabeli. I właśnie przy tym dodawaniu chciałem, by program tworzył dynamicznie tabele. Niestety tak się nie dzieje. Strona jest na serwerze altnet.pl
Go to the top of the page
+Quote Post
SongoQ
post 29.09.2006, 18:32:20
Post #7





Grupa: Przyjaciele php.pl
Postów: 2 923
Pomógł: 9
Dołączył: 25.10.2004
Skąd: Rzeszów - studia / Warszawa - praca

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


Jaki blad zwraca? Trudno stwierdzic co Ci nie dziala. Jak juz ktos wile razy powtarzal nie jestesmy wrozkami zeby takie rzeczy wiedziec.


--------------------
Go to the top of the page
+Quote Post
myth
post 29.09.2006, 18:41:44
Post #8





Grupa: Zarejestrowani
Postów: 35
Pomógł: 0
Dołączył: 25.09.2006

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


1. Tak jak napisal nospor, liczba nie moze byc nazwa tabeli!

  1. <?php
  2. $sql = "CREATE TABLE ".$_POST['przedmiot']." (uczen_ID TEXT NOT NULL, oceny TEXT NOT NULL, sr TEXT NOT NULL, np TEXT NOT 
    NULL)"
    ;  
  3. $wynik = mysql_query ($query);
  4. ?>


2. Powinno byc:
  1. <?php
  2. $wynik = mysql_query($sql) or die(mysql_error());
  3. ?>


Naucz sie wyswietlac bledy (mysql_error() oraz error_reporting( E_ALL )), a nie bedziesz mial tylu problemow. smile.gif
Go to the top of the page
+Quote Post
dgaleza
post 29.09.2006, 21:19:22
Post #9





Grupa: Zarejestrowani
Postów: 21
Pomógł: 0
Dołączył: 29.09.2006

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


PANOWIE!!! Działa. Musiałem dodać mysql_query w warunku if!!!

Powracając do zapisywania danych w jednej tabeli, to powiedz w jaki sposób dynamicznie tworzyć kolumny?questionmark.gif

Jak narazie wszystko działa!!! Wznawiam prace biggrin.gif A wszystkim dziękuję za odpowiedzi. Bardzo profesjonalne forum


Już znalazłem odpowiedź na swoje pytanie. Tylko czy tak rzeczywiście powinienem zrobić. Tzn. jedna tabela, a następnie dodawanie kolumn za pomocą polecenia. Czy będzie szybciej i prościej?questionmark.gif
  1. ALTER TABLE `przedmiot` ADD `pole` TEXT NOT NULL ;
Go to the top of the page
+Quote Post
nospor
post 29.09.2006, 21:20:36
Post #10





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




Cytat
Powracając do zapisywania danych w jednej tabeli, to powiedz w jaki sposób dynamicznie tworzyć kolumny?
A kto ci kazal tworzyc dynamicznie kolumny? Kazdy nowy przedmiot to nowy rekord a nie nowa kolumna. a rekordy to przy pomocy "insert" sie wklada smile.gif


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

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
dgaleza
post 29.09.2006, 21:27:38
Post #11





Grupa: Zarejestrowani
Postów: 21
Pomógł: 0
Dołączył: 29.09.2006

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


Ja myślałem o czymś takim:

+---------------+---------------+------------+
| przedmiot1| przedmiot2| uczen_ID|
+---------------+---------------+------------+
| oceny1.......|oceny2.........|35.............|
+---------------+---------------+------------+

Stąd właśnie dynamiczne tworzenie kolumn. W ten sposób będzie chyba łatwiej wyświetlić dane
Go to the top of the page
+Quote Post
nospor
post 29.09.2006, 21:30:18
Post #12





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




a ja myslalem o takiej:
Kod
idUcznia | idPrzedmiotu | ocena

I kazdy rekord w tej tabeli opisuje jedna ocene dla konkretnego ucznia z konkretnego przedmiotu


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

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
dr_bonzo
post 29.09.2006, 21:51:11
Post #13





Grupa: Przyjaciele php.pl
Postów: 5 724
Pomógł: 259
Dołączył: 13.04.2004
Skąd: N/A

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


dgaleza: poprzegladaj jakies proste przykladowe projekty poprawnych (4p tongue.gif) baz danych, poczytaj o normalizacji -- bo to co chciales stworzyc to jest porazka (dobra droge ci nospor wskazal -- tabele: uczen, przedmiot, oceny_z_przedmiotu, itd). Kolumny TEXT do wszystkich wartosci?? po co?


--------------------
Nie lubię jednorożców.
Go to the top of the page
+Quote Post
dgaleza
post 29.09.2006, 21:56:37
Post #14





Grupa: Zarejestrowani
Postów: 21
Pomógł: 0
Dołączył: 29.09.2006

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


Cytat(nospor @ 29.09.2006, 22:30:18 ) *
a ja myslalem o takiej:
Kod
idUcznia | idPrzedmiotu | ocena

I kazdy rekord w tej tabeli opisuje jedna ocene dla konkretnego ucznia z konkretnego przedmiotu


Ja również myślałem o tabeli tego typu, tylko czy to nie będzie marnotrawienie pamięci. Dajmy na to mamy 16 przedmiotów po 8 ocen z każdego i 35 uczniów. 16*8*35=4480!!!
Wersja z kolumnami, gdzie oceny są wpisywane po przecinku: 16*35=560

Spora różnica. Prawda??
Go to the top of the page
+Quote Post
nospor
post 29.09.2006, 22:10:06
Post #15





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




No, roznica spora, ale nie zawsze o roznice chodzi winksmiley.jpg

Od biedy mozesz zrobic tak:
Kod
idUcznia | idPrzedmiotu | oceny

gdzie oceny bedzie zawieralo oceny odzielone srednikami dla danego ucznia z danego przedmiotu.
Akurat oceny w tym wypadku wydaja sie nie byc kluczowym elementem, jesli chodzi o jakies analizy czy tez wyszukiwania.
No chyba ze jednak bedziesz robil jakies statystyki na ocenach, to jednak polecam rozbice tego na oddzielne rekordy jak na poczatku zaproponowalem


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

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
dr_bonzo
post 29.09.2006, 22:15:59
Post #16





Grupa: Przyjaciele php.pl
Postów: 5 724
Pomógł: 259
Dołączył: 13.04.2004
Skąd: N/A

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


dgaleza: roznica jest prawie 10krotna, ale i tak taka baze zmiescilbys na DYSKIETCE! a miejsca masz zapewne duzo wiecej.

Gdy bedziesz mial znormalizowana baze to
Cytat
No chyba ze jednak bedziesz robil jakies statystyki na ocenach, to jednak polecam rozbice tego na oddzielne rekordy jak na poczatku zaproponowalem

Bedzie duzo prostrze niz babranie sie z przecinkami/srednikami.


--------------------
Nie lubię jednorożców.
Go to the top of the page
+Quote Post
dgaleza
post 29.09.2006, 22:22:53
Post #17





Grupa: Zarejestrowani
Postów: 21
Pomógł: 0
Dołączył: 29.09.2006

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


To mały paradoks, ale jesteś bardziej doświadczony ode mnie i rzeczywiście ten pomysł jest bardzo dobry. Miałem zamiar dodać jeszcze jedną kolumnę o nazwie srednia, gdzie podczas dodawania oceny bylaby na biezaco obliczana srednia i nastepnie wyswietlana za pomoca txt i grafiki. Ale to juz mniejsza z tym.
Jeszcze raz dziękuję za odpowiedzi.
Go to the top of the page
+Quote Post
qbatoja
post 29.09.2006, 23:15:08
Post #18





Grupa: Zarejestrowani
Postów: 52
Pomógł: 0
Dołączył: 3.05.2005

Ostrzeżenie: (10%)
X----


oni maja racje ziomus, jakbys mial wykonywac operacje na srringu z liczbami odzielonymi przecinkami, to marnujesz zasoby. mniesjza o to. powo ;]
Go to the top of the page
+Quote Post
SongoQ
post 30.09.2006, 07:34:38
Post #19





Grupa: Przyjaciele php.pl
Postów: 2 923
Pomógł: 9
Dołączył: 25.10.2004
Skąd: Rzeszów - studia / Warszawa - praca

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


Cytat
Miałem zamiar dodać jeszcze jedną kolumnę o nazwie srednia, gdzie podczas dodawania oceny bylaby na biezaco obliczana srednia i nastepnie wyswietlana za pomoca txt i grafiki. Ale to juz mniejsza z tym.

Srednia zawsze mozesz w locie obliczac


--------------------
Go to the top of the page
+Quote Post
dgaleza
post 30.09.2006, 18:05:58
Post #20





Grupa: Zarejestrowani
Postów: 21
Pomógł: 0
Dołączył: 29.09.2006

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


Więc podsumujmy temat:
Czy lepiej tworzyć tabelę każda ocena w jednym rekordzie, czy wiele ocen w rekordzie?questionmark.gif

Którą z wyżej wymienionych opcji będzie łatwiej edytować i wyświetlać?questionmark.gif

Średniej nie chciałbym obliczać w locie, bo jak program zinterpretuje "5+"?questionmark.gif

Wiecie co Panowie. Robię tabele z jedną oceną w rekordzie, a oceny będę szyfrował. Tzn: przy wysyłaniu ocena nie jest zapisywana jako 5+ tylko 5.5. Następnie przy odczycie spradzenie czy jest ".", następnie czy po . jest 5 - jeśli tak +, elseif (czy po kropce jest 75) -
Go to the top of the page
+Quote Post

2 Stron V   1 2 >
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: 12.06.2025 - 12:35