Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Dynamiczne tworzenie pól
SHiP
post
Post #1





Grupa: Zarejestrowani
Postów: 697
Pomógł: 47
Dołączył: 19.12.2003
Skąd: Lublin

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


Mam pewnien element do zaprogramowania. Przypuśćmy, ze mam tabelę m_users

Kod
+---------------------+-------------------+------+-----+---------+----------------+
| Field               | Type              | Null | Key | Default | Extra          |
+---------------------+-------------------+------+-----+---------+----------------+
| id                  | int(12)           | NO   | PRI | NULL    | auto_increment |
| login               | char(32)          | NO   |     | NULL    |                |
| password            | char(32)          | NO   |     | NULL    |                |
| email               | char(32)          | YES  |     | NULL    |                |
+---------------------+-------------------+------+-----+---------+----------------+


Teraz chciałbym ją dowolnie rozszerzać. Tak aby każdy użytkownik mógł mieć różne dodatkowe pola np.
Kod
+-------+----------+------+-----+---------+-------+
| Field | Type     | Null | Key | Default | Extra |
+-------+----------+------+-----+---------+-------+
| name  | char(20) | YES  |     | NULL    |       |
| type  | char(20) | YES  |     | NULL    |       |
+-------+----------+------+-----+---------+-------+


Gdzie name to nazwa pola(np "gadugadu") a type to jego typ(np "int(10)")
Teraz w 3 tabeli trzymałbym wartości. I tu jest problem ponieważ nie mogę stworzyć tabeli nie wiedząc jakiego rodzaju pola będą się w niej znajdować. Wymyśliłem, że stworzę sobie 5 tabel (jedna wartości int, drugą wartości date, trzecią wartości char, czwartą wartości text i piątą wartości boolean). Dam ROW_FORMAT=DYNAMIC Aby zoptymalizować trochę ilość zajmowanego przez nie miejsca i powinno działać. Następnie stworzę widok i będe mógł tworzyć zapytania w stylu.

  1. SELECT * FROM v_users WHERE uid = 3;


Pytanie tylko. Czy to jest dobre rozwiązanie? Może polecicie coś lepszego zanim zasiąde do kodowania (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) ?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 2)
erix
post
Post #2





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Cytat
Pytanie tylko. Czy to jest dobre rozwiązanie? Może polecicie coś lepszego zanim zasiąde do kodowania ?

Złe rozwiązanie. Struktury tabeli staraj się nie ruszać, gdyż przy większej ilości rekordów zajmie dużo czasu.

Zrób tabelę, która będzie przechowywać pola ID, userID, property, value. Value zapisuj jako np. varchar, a wyciąganie konkretnego typu możesz przecież zrealizować przez cast. (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)

Wg mnie tak by było najlepiej, choć mogę się mylić. (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
Go to the top of the page
+Quote Post
SHiP
post
Post #3





Grupa: Zarejestrowani
Postów: 697
Pomógł: 47
Dołączył: 19.12.2003
Skąd: Lublin

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


Dzięki wielkie (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) . Szczerze mówiąc nie wiedziałem o CAST(). Znacznie mi to ułatwi pracę (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) .
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: 23.12.2025 - 13:21