Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Kilka liczb w jednej kolumnie
Forum PHP.pl > Forum > Bazy danych > MySQL
lexis72
Witam,
Czy jest jakis sposob aby do jednej kolumny w bazie danych dodac kilka informacji (liczb) tak zeby mozna je bylo latwo wyswietlic na stronie?
Mam taka sytuacje ze potrzebuje wstawic do bazy 5 liczb kazdemu userowi np 20-45-30-5 i nie chcialbym robic 5 osobnych kolumn do tego bo to troche bez sensu chyba. Myslalem nad dodaniem ich prostu w takiej formie jak napisalem wyzej i wyswietlania np z limitem znakow czyli pierwsza liczba to wyswietlanie 2 pierwszych znakow, druga liczba wyswietlanie 4 i 5 znaku itd ale problem w tym ze cyfry musialbym zapisywac w formie 00 lub 05 co ostatecznie moge zrobic ale moze znacie jakis lepszy sposob, moze mysql ma jakies typy kolumn ktore daja mozliwosc wpisywania kilku liczb.

I tak przy okazji mam jeszcze male pytanie, jaki typ kolumny radzicie ustawiac w przypadku danych liczbowych w przedziale mniej wiecej 0-200 czyli bylyby tam liczby np 85,50,43 itd, czy mediumint(8) bedzie dobre do tego?
Crozin
1. MySQL nie wspiera typów tablicowych, więc nie da się w "normalny" sposób umieścić wielu numerów w jednej komórce tabeli.
2. Dlaczego nie utworzysz zwykłej relacji? USER(id, name, ...) -- USER_NUMBER (id, user_id, number)
3. Od biedy, jeżeli jest ku temu dobry powód, wiesz co robisz i jakie wiążą się z tym konsekwencje możesz wrzucić do kolumny typu tekstowego (VARCHAR/TEXT) dane w formie zserializowanej tablicy (jeżeli ma z tego korzystać tylko PHP), jakiegoś JSONa czy chociażby numerów oddzielonych jakimś separatorem.
matiit
Najlepszy sposób wg mnie to dodatkowa tabela numbers.
Wtedy w pierwotnej tabeli dodajesz tylko relacje po nowym polu numbers_id.

I w nowej tabeli numbers dajesz 5 kolumn.

Co do typu: unsigned tinyint?
lexis72
Oczywiscie moglbym stworzyc nowa tabele do tego ale jest to tak malo wazna informacja (choc chcialbym ja miec) ze wolalbym nie zasmiecac bazy nowa tabela do tego. Z tego co napisaliscie najlepszym rozwiazanie bedzie zatem wpisywanie tego w formie klucza liczb XX-XX-XX-XX-XX i odczytywac wybrane znaki przez php. Generalnie nie jest to chyba jakies przestepstwo dla php czy mysql bo z tego co napisaliscie bardzo nieprzychylnie sie do tego odwolaliscie a raczej tego uzyje smile.gif Mimo to dzieki za pomoc.
matiit
Jeśli tak to zrobisz to zabijesz sobie możliwość szybkiego i prostego wyszukiwania tych wartości.
A to jest tylko pierwszy z brzegu problem.
lexis72
Dlaczego? NP:
SELECT SUBSTRING(number, 3, 2)
I w substringu ustalam sobie ktore liczby chce pobrac wink.gif
matiit
Ale to jest wolniejsze..
Nie możesz sobie posortować szybko po tych polach.
Nie możesz szybko obliczyć średniej itd
Jest to mniej elastyczne rozwiązanie smile.gif
lexis72
No tak nie bede mogl wybierac najmniejszych/najwiekszych wartosci i w ogole operowac na tych liczbach jedynie je wyswietlac. W sumie tylko to poki co potrzebuje ale przemysle to jeszcze. Dzieki za rady. smile.gif
mmmmmmm
np. user=1 bedzie mial miec 1,2,4,7,9 , a user=2 - 1,2,3,4,5
I teraz zadanie - znajdz, tych, ktorzy maja 4 smile.gif
Oczywiście zaraz zaczniesz kombinowac z LIKE, potem sie okaze, ze 14 tez sie lapie, wiec zaczbniesz kombinowac z '%,4,%'
To się okaze, ze nie lapie pierwszej i ostatniej liczby... Stworzysz potworka typu Concat(',', liczby, ',') LIKE '%,4,%'
i to bedzie dzialac, ale po co ci to?
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.