Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Dwukrotne pobranie danych z jednej tabeli
Forum PHP.pl > Forum > Bazy danych > MySQL
Crozin
Witajcie,
natknąłem się na problem z MySQL, mianowicie:

Co chcę osiągnąć:
Pobrać wszystko z tabeli użytkownik, sesji, grup, uprawnień (permissions)

Problem:
Dane z tabeli z uprawnienami muszę pobrać dwa razy.

Oto co wykombinowałem:
  1. SELECT u.*, s.*, gp.*, up.*
  2. FROM sys_users u, sys_sessions s, sys_permissions gp, sys_permissions up
  3. WHERE userID=sessionUserID AND sessionID='ed2ac82bda1ae777f9d5d9cc0037f881' AND userGroup=gp.permissionsGroupID AND userID=up.permissionsUserID;
Niestety wynikiem zapytania jest:
wszystko z tabeli użytkowników (u)
wszystko z tabeli sesji (s)
wszystko z tabeli uprawnień (up)

nie ma niestety nieczego z tabeli uprawnień, oznaczonej jako 'gp' - i nic w tym dziwnego... dane z "up", nadpisują dane z "gp" winksmiley.jpg

Rozwiązaniem było by ustawienie perfixu dla wsystkich tabel... może jako f-cje? Z racji, że pewnie mało kto wie o co chodzi, posłużę się pewnym przykładem:
  1. SELECT u.*, s.*, PREFIX(gp.*, 'jakis_prefix'), PREFIX(up.*, 'inny_prefix_dla_kazdej_z_tabel')...


Jednakże z tego co mi wiadomo takie coś nie istnieje winksmiley.jpg

Podsumowywując:
obecnie otrzymuję taki wynik:
CODE
Array
(
[userID] => 1
[userGroup] => 1
[userName] => Anonymous
[userNameClean] => anonymous
[userPassword] =>
[userEmail] =>
[userEmailHash] =>
[userWarnings] => 0
[userLoginTries] => 0
[userCreated] => 0
[userLastVisit] => 1186912657
[userUnreadPM] => 0
[userIP] =>
[userTimezone] => 3
[userLang] => pl
[userTemplate] => default
[userHidden] => 0
[userShowEmail] => 1
[userSignature] =>
[userInterests] =>
[userFrom] =>
[userWebsite] =>
[userTlen] =>
[userGG] =>
[userJabber] =>
[userActivationKey] =>
[userNewPassword] =>
[sessionID] => ed2ac82bda1ae777f9d5d9cc0037f881
[sessionUserID] => 1
[sessionCreated] => 1186910785
[sessionLastVisit] => 1186912657
[sessionLocation] => index.php
[sessionIP] => 127.0.0.1
[sessionBrowser] => c5d9f452fd84211aeeab3158e4291941
[sessionAdmin] => 0
[permissionsUserID] => 1
[permissionsGroupID] => 0
[permissionsCOS] => przykladowa_wartosc
)
A chiałbym otrzymać
CODE
Array
(
[userID] => 1
[userGroup] => 1
[userName] => Anonymous
[userNameClean] => anonymous
[userPassword] =>
[userEmail] =>
[userEmailHash] =>
[userWarnings] => 0
[userLoginTries] => 0
[userCreated] => 0
[userLastVisit] => 1186912657
[userUnreadPM] => 0
[userIP] =>
[userTimezone] => 3
[userLang] => pl
[userTemplate] => default
[userHidden] => 0
[userShowEmail] => 1
[userSignature] =>
[userInterests] =>
[userFrom] =>
[userWebsite] =>
[userTlen] =>
[userGG] =>
[userJabber] =>
[userActivationKey] =>
[userNewPassword] =>
[sessionID] => ed2ac82bda1ae777f9d5d9cc0037f881
[sessionUserID] => 1
[sessionCreated] => 1186910785
[sessionLastVisit] => 1186912657
[sessionLocation] => index.php
[sessionIP] => 127.0.0.1
[sessionBrowser] => c5d9f452fd84211aeeab3158e4291941
[sessionAdmin] => 0
[GPpermissionsUserID] => 0
[GPpermissionsGroupID] => 1
[GPpermissionsCOS] => przykladowa_wartosc
[UPpermissionsUserID] => 1
[UPpermissionsGroupID] => 0
[UPpermissionsCOS] => przykladowa_wartosc
)


Pozdrawiam
wijet
Mógłbyś powiedzieć co chcesz osiągnąć pobierając dwa razy to samo?, bo może da się to inaczej zrobić.
Jeśli w funkcji mysql_fetch_array użyjesz MYSQL_NUM to otrzymasz powtarzające się dane, tylko że wtedy klucze będą liczbami i trudniej będzie na tym operować. Jednym z rozwiązań jest nadanie osobno aliasu dla każdego pola z "up".
UDAT
OT: Popraw literówkę w temacie
Crozin
UDAT dzięki za zwrócenie uwagi - to nawet nie literówka, tylko błąd ortograficnzy (w dodatku głupi jak.. :])

A co do problemu... rozwiązałem go w znacznie logiczniejszy i co ważniejsze optymalniejszy sposób - dodatkowe pole w tabeli z serializowaną tablica winksmiley.jpg

Ehh.. ostatnio, gdy już napiszę jakiś temat po 10min znajduję samemu rozwiązanie
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.