Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL] jak wyciągnąc z tabeli
Forum PHP.pl > Forum > Bazy danych
totyl
Mam w tabeli:

person_id parametr wartość
1 imie john
1 nazwisko black
2 imie bob
2 nazwisko white
3 imie fred
4 nazwisko red

Chciałbym wyciągnąć dane w postaci:

id imie nazwisko
1 john black
2 bob white
3 fred NULL
4 NULL red

Nie mam pomysłu na zrobienie tego...
Czy ktoś ma jakiś pomysł?

Pozdrawiam.
totyl
cojack
Que? Pokaż jak tabela wygląda.
wookieb
Da się ale jeżeli chcesz to zrobić w postaci SQL-a to będzie to strasznie nieoptymalne. obrób te dane ręcznie w PHP i zapisz w jakimś cache.
sn1p3r
Cytat(totyl @ 10.03.2011, 22:36:19 ) *
Mam w tabeli:

person_id parametr wartość
1 imie john
1 nazwisko black
2 imie bob
2 nazwisko white
3 imie fred
4 nazwisko red

[...]


Czemu taka dziwna struktura?
Nie może być tak?
person_id | imie | nazwisko |

?
totyl
Cytat(sn1p3r @ 12.03.2011, 10:21:52 ) *
Nie może być tak?
person_id | imie | nazwisko |

?


Nie. Musi być tak ja napisałem.
Bo nie wiem jak będzie docelowo wyglądać tabela a chcę uniknąć alter-owania jej co chwila. Może pojawi się dla każdej osoby np: data urodzenia, stan cywilny czy cokolwiek bądź.

Pozdrawiam
totyl

Cytat(wookieb @ 12.03.2011, 04:18:07 ) *
Da się ale jeżeli chcesz to zrobić w postaci SQL-a to będzie to strasznie nieoptymalne.....


Tylko i wyłącznie w postaci SQL. Masz jakikolwiek pomysł?

Pozdrawiam
totyl



Cytat(cojack @ 11.03.2011, 23:43:17 ) *
Que? Pokaż jak tabela wygląda.


Tak jak napisałem.

person_id parametr wartość
cojack
To baw się sam.
wiiir
Czyli jesli dobrze rozumiem, jezeli bedziesz mial 20 pol z danymi to bedzie 20 rekordow o ID 1 ?
Hahahahahahaha powodzenia...

Jezeli nie chcesz robic "alterowania" to zrob sobie 2 dodatkowe pola w swojej tabeli, definicja i wartosc

Przykład definicji
  1. $definicja = 'IMIE|NAZWISKO|TELFON|MAIL';


Przyklad wartosci
  1. $wartosc = 'JAN|KOWALSKI|123-456-789|JAKIS@MAIL.PL'


I teraz zrob sobie explode po znaku "|" dla definicji i wartosci, potem petla do tabeli asocjacyjnej w postaci
  1. $def = explode('|',$definicja);
  2. $val = explode('|',$wartosc);
  3. $i=0;
  4. while($i<=count($def)) // obojetnie co w sumie i tak ilosc def i val musi byc taka sama
  5. {
  6. $arr[$person_id][$def[$i]] = $val[$i];
  7. $i++
  8. }


Potem tylko dodatkowe funkcje ktore dadza return oczekiwanych wartosci, budowania definicji i wartosci .... i 100 innych ktore beda potrzbne
  1. $arr[1]['IMIE'] // => john
  2. $arr[1]['NAZWISKO'] // => black

Ja osobiscie stosuje powyższe rozwiaznie tylko i wylacznie w przypadku kiedy operator systemu buduje sobie slowniki ktore moga sie skladac z niewiadomej ilosci danych (tabela - kolumny i rowsy)... jeszcze mnie nie zawiodlo smile.gif (mimo iz ciezko sie to czyta w surowej postaci na bazie)

Ale jesli chodzi o jakies dane (pola) na ktore zwykly operator systemu (uzytkownik) nie ma wplywu a jedynie jest to wymagane przez zmiane w projekcie czyli twoj klient ci powiedzial ze teraz chce miec w formatce 3 telefony zamiast 1 to sie dodaje kolumny do tabeli i zmienia w aplikacji odpowiednie linijki smile.gif
nospor
Cytat
Nie. Musi być tak ja napisałem.
Bo nie wiem jak będzie docelowo wyglądać tabela a chcę uniknąć alter-owania jej co chwila. Może pojawi się dla każdej osoby np: data urodzenia, stan cywilny czy cokolwiek bądź.
Najdurniejsze wyjaśnienie jakie słyszałem :/ Tylko dlatego, że być może kiedyś będziesz musiał dodać kolejne pole, to tworzysz tak nieoptymalną bazę danych. Brawo. tongue.gif
Poza tym co ty za bazę tworzysz, ze nie wiesz czy tam będzie data urodzenia czy nie...
vermis
Cytat(totyl @ 12.03.2011, 11:54:41 ) *
Nie. Musi być tak ja napisałem.
Bo nie wiem jak będzie docelowo wyglądać tabela a chcę uniknąć alter-owania jej co chwila. Może pojawi się dla każdej osoby np: data urodzenia, stan cywilny czy cokolwiek bądź.

Czyli piszesz system i nie wiesz jak docelowo ma wyglądać? Rozumiem, że aplikacja będzie się rozwijać, ale chyba jakieś wstępne założenia masz?
Swoją drogą dodanie pola do tabeli nie jest chyba aż takim problemem. Dla mnie więcej problemów wyniknie przy twoim rozwiązaniu. Takie rozwiązanie jest dobre, jeśli pozwalasz użytkownikom definiować własne właściwości.
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.