![]() |
![]() |
![]() ![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 4 Pomógł: 0 Dołączył: 18.02.2007 Ostrzeżenie: (0%) ![]() ![]() |
Siedzę nad tym od kilku ładnych nocek, i po prostu załamka (IMG:http://forum.php.pl/style_emoticons/default/sad.gif)
Opis problemu: Mam w sql-u trzy tablice: uzytkownicy, pisma i potwierdzenia. W tablicy potwierdzenia znajdują się dane czy dany uzytkownik zapoznal się z konkretnym pismem, czyli m.in. iduzytkownika, idpisma i potwierdzenie=T lub N (oczywiście w zależności czy uzytkownik potwierdził zapoznanie). Problem zaczyna się kiedy na stronie chcę wyświetlić w postaci tabeli zbiorczą informację w następujący sposób: __________1 kolumna, 2 kolumna, 3 kolumna, ......, n kolumna 1 wiersz: ___________pismo 1, pismo 2, ..........., pismo n 2 wiersz: uzytkownik 1, T lub N, T lub N, .........., T lub N 3 wiersz: uzytkownik 2, T lub N, T lub N, .........., T lub N ... k wiersz: uzytkownik k+1, T lub N,T lub N, ........, T lub N oto mój fragment kodu i niestety nie jest dobrze (IMG:http://forum.php.pl/style_emoticons/default/sad.gif) Pierwszy wiersz, kiedy wypisuje nr pisma - ok, pierwsza kolumna, kiedy wypisuje login uzytkownika - ok. Ale wszystko się psuje przy wypisywaniu wartości T/N dla konkretnego uzytkownika i konkretnego pisma... Może ktoś ma jakiś pomysł(IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif) ?
Baaardzo proszę o pomoc!!!!!!!! ------------------- do kodu php używaj BBCode php ~Cienki1980 |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 17 Pomógł: 0 Dołączył: 20.02.2007 Skąd: Wroclaw Ostrzeżenie: (0%) ![]() ![]() |
Ja bym zrobił tak:
Dzięki temu masz 3 tabele, w czym jedna $tab_potwierdzenia, która załatwia Ci sprawę potwierdzeń. Musisz tylko dodać klasy i inne upiększenia, oczywiście w zapytaniach brakuje tez ORDER BY. Mam nadzieje ze pomoże. --------------------- tak jak u poprzednika. do php korzystamy z BBCode php a nie html no i chyba alt się zepsuł bo żadnych ogonków nie było. ~Cienki1980 Ten post edytował Cienki1980 21.02.2007, 08:32:32 |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 4 Pomógł: 0 Dołączył: 18.02.2007 Ostrzeżenie: (0%) ![]() ![]() |
K1ller dzięki za zainteresowanie tematem (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Ale niestety dalej mam problem... Coś jest nie tak z wyświetlaniem tych nieszczęsnych potwierdzeń, czyli: .$tab_potwierdzenia[$nr_pisma][$nr_uzytkownika]. Próbowałam na wszelkie sposoby i NIC (IMG:http://forum.php.pl/style_emoticons/default/sad.gif) W tej chwili dalej wyświetla mi dynamicznie użytkowników i dynamicznie nazwę dokumentów, ale na przecięciu użytkownika i dokumentu, niestety nic się nie pojawia (IMG:http://forum.php.pl/style_emoticons/default/sad.gif) Pusto... Od tygodnia kombinuję (nie chciałam tak od razu walić na forum, że dalej mi nie działa ta tablica dwuwymiarowa), ale już powoli tracę cierpliwość (IMG:http://forum.php.pl/style_emoticons/default/sad.gif) Więc jak ktoś ma jakiś pomysł, to bardzo proszę o pomoc!!! PS. Czy moje problemy mogą być związane z wersją PHP? Póki co jestem zmuszona pracować na PHP4. |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 17 Pomógł: 0 Dołączył: 20.02.2007 Skąd: Wroclaw Ostrzeżenie: (0%) ![]() ![]() |
K1ller dzięki za zainteresowanie tematem (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Ale niestety dalej mam problem... Coś jest nie tak z wyświetlaniem tych nieszczęsnych potwierdzeń, czyli: .$tab_potwierdzenia[$nr_pisma][$nr_uzytkownika]. Próbowałam na wszelkie sposoby i NIC (IMG:http://forum.php.pl/style_emoticons/default/sad.gif) W tej chwili dalej wyświetla mi dynamicznie użytkowników i dynamicznie nazwę dokumentów, ale na przecięciu użytkownika i dokumentu, niestety nic się nie pojawia (IMG:http://forum.php.pl/style_emoticons/default/sad.gif) Pusto... Od tygodnia kombinuję (nie chciałam tak od razu walić na forum, że dalej mi nie działa ta tablica dwuwymiarowa), ale już powoli tracę cierpliwość (IMG:http://forum.php.pl/style_emoticons/default/sad.gif) Więc jak ktoś ma jakiś pomysł, to bardzo proszę o pomoc!!! PS. Czy moje problemy mogą być związane z wersją PHP? Póki co jestem zmuszona pracować na PHP4. Wersja PHP tutaj nie ma znaczenia, bo nie korzystamy z zadnych nowych udogodnien. na poczatek sprawdz co jest w tej tablicy uzywajac: to bedzie wiadomo czy wogole ta tablica sie wypelnia czy nie, po za tym jakbys mogla wyslac strukture dokladna bazy danych (moze nazyw pol sa inne) |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 4 Pomógł: 0 Dołączył: 18.02.2007 Ostrzeżenie: (0%) ![]() ![]() |
na poczatek sprawdz co jest w tej tablicy uzywajac: to bedzie wiadomo czy wogole ta tablica sie wypelnia czy nie Po wykonaniu powyższej instrukcji wywala mi ładnie wartości:
czyli tablica jako taka ładnie się wypełnia wartościami (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Ale niestety pętla:
nie wyświetla mi tych wartości (IMG:http://forum.php.pl/style_emoticons/default/sad.gif) |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 20 Pomógł: 0 Dołączył: 12.11.2006 Skąd: Rudziniec Ostrzeżenie: (0%) ![]() ![]() |
To jest zapytanie SQL (krzyżowe), które realizuje Twój problem. Nagłówki kolumn to nazwy pism, które były potwierdzone przez przynajmniej jednego użytkownika. Podobnie z użytkownikami. Zapytanie wygenerowałem w MS Access. Nie wiem, czy MySQL to łyknie.
Powyższy fragment jest odpowiedzialny za zbudowanie relacji 'wiele do wielu' (wielu użytkowników może potwierdzać wiele pism). TRANSFORM i PIVOT - odpowiedzialne za utworzenie zapytania krzyżowego (na jednej osi użytkownicy, na drugiej - pisma) To co chcesz uzyskać, to typowy przykład zapytania krzyżowego realizowany przez bazy danych dużo wydajniej niż najlepszy kod w PHP. W odpowiedzi dostajesz po prostu zwykłą tabelę z danymi. Pierwszy wiersz (bo on nie jest zwracany powyższą instrukcją) uzyskasz poprzez zwykłego SELECT'a wybierającego pisma, w których było jakiekolwiek potwierdzenie:
Przyjąłem tutaj taki schemat nazw: użytkownicy (uzytkownik, ID) - klucz główny: ID pisma (pismo, ID_pismo) - klucz główny: ID_pismo potwierdzenia (potw, ID_pismo, ID_uz) - klucz obcy: para pól ID_pismo, ID_uz Mam nadzieję, że pomogłem. Możesz więcej poczytać o zapytaniach krzyżowych. Generalnie uważam, że jeżeli jakieś rozwiązanie jest udostępniane przez SQL, to należy z niego korzystać, bo jest najwydajniejsze. Każda proteza napisana w PHP powoduje, że przesyłanie danych jest dużo wolniejsze i skrypty (zwłaszcza te operujące na dużej ilości rekordów) działają znacznie wolniej. Pozdrawiam i życzę powodzenia. |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 4 Pomógł: 0 Dołączył: 18.02.2007 Ostrzeżenie: (0%) ![]() ![]() |
Miggie dzięki za wskazówki (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Ale w tej chwili, to nie mam problemu z wyciągnięciem danych z bazy (bo tablica jako taka wypełnia mi się właściwymi danymi). Mój problem, to wyświetlenie na stronie otrzymanych wyników. No i tutaj niestety nie działają mi te pętle foreach (IMG:http://forum.php.pl/style_emoticons/default/sad.gif) A dokładniej: wyświetlanie pism i użytkowników działa bez zarzutu, ale wyświetlanie tych nieszczęsnych potwierdzeń na przecięciu danego pisma i użytkownika nie idzie w żaden sposób (IMG:http://forum.php.pl/style_emoticons/default/sad.gif) A przecież tablica z tymi potwierdzeniami zawiera dane... Czyli mój problem, to dobranie się do tych danych i ich wyświetlenie... |
|
|
![]() ![]() |
![]() |
Aktualny czas: 23.08.2025 - 17:17 |