Pomoc - Szukaj - U¿ytkownicy - Kalendarz
Pe³na wersja: Problem ale nie wiem z czym
Forum PHP.pl > Forum > Przedszkole
zicher
Witam

Mam nastepujacy problem:

Mam taka oto czesc kodu

  1. <?php
  2. while ($rekord = mysql_fetch_array($wynik))
  3. {
  4.  
  5. echo '<tr class="pal">';
  6. echo '<td width="45"><div align="center">'.++$i.'</div></td>';
  7. echo '<td width="200"><div align="center"><a href="filmopis.php?gatunek='.$gatunek.'&seria='.$seria.'&filmopis=',$rekord['filmopis_id'],'">'.$rekord['filmopisnazwaorg'].'</a></div></td>';
  8. echo '<td width="200"><div align="center"><a href="filmopis.php?gatunek='.$gatunek.'&seria='.$seria.'&filmopis=',$rekord['filmopis_id'],'">'.$rekord['filmopisnazwapol'].'</a></div></td>';
  9.  
  10. echo '<td width="50"><div align="center">',$rekord['rok'],'</div></td>';
  11. echo '<td width="150"><div align="center">',$rekord['krajnazwa'],'</div></td>';
  12. echo '<td width="100"><div align="center">',$rekord['rezysernazwa'],'</div></td>';
  13. }
  14. ?>


problemem sa rekordy
  1. <?php
  2. ',$rekord['krajnazwa'],'
  3. ?>
i
  1. <?php
  2. ',$rekord['rezysernazwa'],'
  3. ?>
.

Sa to rekordy z relacji wiele do wielu. Juz wyjasniam. Mam trzy tabele filmopis, rezyser i kraj, rezyser z filmopis sa polaczone relacja wiele do wielu za pomoca tablicy laczace filmopis_rezyser, per analogiam tablica kraj.

Jezeli tylko jeden rezyser wyrezyserowal film i tylko w jednym kraju wszystko jest ok.

Natomiast jezeli rezyserow lub krajow jest wiecej zaczynaja sie problemy. Zalozmy ze dany film zostal wyprodukowany w USA przez dwoch rezyserow. Wtedy pojawiaja mi sie dwa filmy pod tym samym tytulem z tego samego kraju lecz rezyserowane przez dwoch roznych rezyserow. A mnie interesuje sytuacja w ktorej zwracany jest jeden link z jednego kraju z dwoma rezyserami w miejsce
  1. <?php
  2. ',$rekord['rezysernazwa'],'
  3. ?>
.

Nie jest to problem zle ulozonej bazy ani zlego zapytania.

Bardzo prosze najlepiej o przyklad jak rozwiazac ten problem i wyjasnienie co zostalo zastosowane w rozwiazaniu tego problemu.

Z powazaniem
zicher
pEbE
przeczyta³em pierwsze linijki i widze taki blad:

  1. <?php
  2. echo '<td width="50"><div align="center">'.$rekord['rok'].'</div></td>';
  3. ?>


miedzy tekstem a zmienna powinna byc kropka :]
To takie apropo ;P
phobos
Cytat(zicher @ 2006-04-14 11:47:28)
Nie jest to problem zle ulozonej bazy ani zlego zapytania.

a skad wiesz ze to nie zapytanie questionmark.gif
przecierz to ono pobiera dane o rezyserze z tabeli posrdeniej a potem z inej ,
pokarz twoje zapytanie i opisz mniej wiecej jak polaczyles filmopis z rezyser( strukture tabel)
zicher
Witam ponownie
Cytat
a skad wiesz ze to nie zapytanie questionmark.gif


Wiem ze to nie zapytanie poniewaz strone wczesniej korzystam z tego samego zapytania do zliczania filmow w danej kategorii i dziala poprawnie. Zreszta wpisujac to zapytanie do sql'a w phpmyadminie wyswietla dokladnie to samo to jest osobny wiersz dla jednego i osobny dla drugiego rezysera, przy czym zlicza poprawnie.

Przyklad: Jezeli w danej kategorii sa trzy filmy w tym jeden z dwoma rezyserami pokazuje cztery wiersze polaczone ale zlicza 3 filmy.

Oto dump

  1. CREATE TABLE `filmopis_rezyser` (
  2. `filmopis_id` int(11) NOT NULL DEFAULT '0',
  3. `rezyser_id` int(11) NOT NULL DEFAULT '0',
  4. `seria_id` int(11) NOT NULL DEFAULT '0',
  5. `gatunek_id` int(11) NOT NULL DEFAULT '0',
  6. UNIQUE KEY `filmopis_id` (`filmopis_id`,`rezyser_id`)
  7. ) TYPE=MyISAM;
  8.  
  9. --
  10. -- Zrzut danych tabeli `filmopis_rezyser`
  11. --
  12.  
  13. INSERT
  14. INTO `filmopis_rezyser`
  15. VALUES (5, 1, 1, 1);
  16. INSERT
  17. INTO `filmopis_rezyser`
  18. VALUES (2, 2, 1, 1);
  19. INSERT
  20. INTO `filmopis_rezyser`
  21. VALUES (3, 3, 1, 1);
  22. INSERT
  23. INTO `filmopis_rezyser`
  24. VALUES (4, 1, 1, 1);
  25. INSERT
  26. INTO `filmopis_rezyser`
  27. VALUES (6, 1, 1, 1);
  28. INSERT
  29. INTO `filmopis_rezyser`
  30. VALUES (7, 1, 1, 1);
  31. INSERT
  32. INTO `filmopis_rezyser`
  33. VALUES (8, 4, 2, 1);
  34. INSERT
  35. INTO `filmopis_rezyser`
  36. VALUES (1, 5, 4, 1);
  37. INSERT
  38. INTO `filmopis_rezyser`
  39. VALUES (9, 6, 6, 4);
  40. INSERT
  41. INTO `filmopis_rezyser`
  42. VALUES (10, 7, 1, 1);
  43. INSERT
  44. INTO `filmopis_rezyser`
  45. VALUES (10, 8, 1, 1);


Oto skrocony dump tablicy laczacej. Jak widac Film o id 10 ma dwoch rezyserow jeden ma id 7 drugi 8.
Seria_id i gatunek_id to klucze obce pochodzace z polaczenia dwoch innych tablic z filmopis (seria, gatunek).

Zapytanie wyglada nastepujaco:

  1. SELECT *
  2. FROM gatunek,
  3. seria, filmopis, kraj, filmopis_kraj, rezyser, filmopis_rezyser WHERE gatunek.gatunek_id=filmopis.gatunek_id AND seria.seria_id=filmopis.seria_id AND filmopis.filmopis_id=filmopis_kraj.filmopis_id AND kraj.kraj_id=filmopis_kraj.kraj_id AND filmopis.filmopis_id=filmopis_rezyser.filmopis_id AND rezyser.rezyser_id=filmopis_rezyser.rezyser_id AND seria.seria_id=filmopis_kraj.seria_id AND gatunek.gatunek_id=filmopis_kraj.gatunek_id AND seria.seria_id=filmopis_rezyser.seria_id AND gatunek.gatunek_id=filmopis_rezyser.gatunek_id AND seria.seria_id='$seria' AND gatunek.gatunek_id='$gatunek' ORDER BY rok


Wiem ze nie jest to profesjonalne zapytanie i ze nie uzywam joinow. Gubie sie w nich troche sad.gif Wczesniej oczewiscie pobieram GET'em gatunek i serie z wczesniejszej strony. Wiem ze to dziala bo po wpisaniu echo zapytanie serie i gatunki zmieniaja sie w odpowiednie id

Z powazaniem
zicher
phobos
tutaj masz kod php
  1. <?php
  2. while ($rekord = mysql_fetch_array($wynik))
  3. {
  4. $query2=mysql_query("SELECT rezysernazwa FROM rezyser r JOIN filmopis_rezyser fr ON r.rezyser_id
    =fr.rezyser_id WHERE fr.filmopis_id='"
    .$record['filmopis_id']."'");
  5. $result2=implode(",",mysql_fetch_array($query2));
  6. $query3=mysql_query("select krajnazwa FROM kraj k JOIN filmopis_kraj fk ON k.kraj_id=fk.kraj_id 
    WHERE fk.filmopis_id='"
    .$record['filmopis_id']."'");
  7. $result3=implode(",",mysql_fetch_array($query3));
  8.  
  9. echo '<tr class="pal">';
  10. echo '<td width="45"><div align="center">'.++$i.'</div></td>';
  11. echo '<td width="200"><div align="center"><a href="filmopis.php?gatunek='.$gatunek.'&seria='.$seria.'&filmopis=',$rekord['filmopis_id'],'">'.$rekord['filmopisnazwaorg'].'</a></div></td>';
  12. echo '<td width="200"><div align="center"><a href="filmopis.php?gatunek='.$gatunek.'&seria='.$seria.'&filmopis=',$rekord['filmopis_id'],'">'.$rekord['filmopisnazwapol'].'</a></div></td>';
  13.  
  14. echo '<td width="50"><div align="center">'.$rekord['rok'].'</div></td>';
  15. echo '<td width="150"><div align="center">'.$result3.'</div></td>';
  16. echo '<td width="100"><div align="center">'.$result2.'</div></td>';
  17. }
  18. ?>

a tutaj zapytanie sql
  1. SELECT *
  2. FROM gatunek,seria,
  3. filmopis, kraj, filmopis_kraj, rezyser, filmopis_rezyser
  4. WHERE gatunek.gatunek_id=filmopis.gatunek_id AND seria.seria_id=filmopis.seria_id AND seria.seria_id=filmopis_kraj.seria_id AND gatunek.gatunek_id=filmopis_kraj.gatunek_id AND seria.seria_id=filmopis_rezyser.seria_id AND gatunek.gatunek_id=filmopis_rezyser.gatunek_id AND seria.seria_id='$seria' AND gatunek.gatunek_id='$gatunek' ORDER BY rok

ALE jak mozesz to sprawdz czy jak wytniesz z tego zapytania
  1. AND seria.seria_id=filmopis_kraj.seria_id AND gatunek.gatunek_id=filmopis_kraj.gatunek_id AND seria.seria_id=filmopis_rezyser.seria_id AND gatunek.gatunek_id=filmopis_rezyser.gatunek_id


to wyjdzie na to samo bo jak tak to wtedy usun tez
kraj, filmopis_kraj, rezyser, filmopis_rezyser
z poleccenia
  1. FROM gatunek,seria,
  2. filmopis, kraj, filmopis_kraj, rezyser, filmopis_rezyser


powiedz czy daiala good
zicher
Witam

Dzieki z informacje. Przez ostatnie godziny probowalem cos z tym zrobic, ale poddaje sie sad.gif

Niestety to nie dziala. Zwraca mi cosik takiego:

Kod
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in c:\usr\krasnal\www\paladyn\kolekcje\filmseria.php on line 45

Warning: implode(): Bad arguments. in c:\usr\krasnal\www\paladyn\kolekcje\filmseria.php on line 45

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in c:\usr\krasnal\www\paladyn\kolekcje\filmseria.php on line 47

Warning: implode(): Bad arguments. in c:\usr\krasnal\www\paladyn\kolekcje\filmseria.php on line 47


Z tego co sie zorientowalem rzuca sie o te zapytania z joinami:

  1. <?php
  2. SELECT rezysernazwa FROM rezyser r JOIN filmopis_rezyser fr ON r.rezyser_id=fr.rezyser_id WHERE fr.filmopis_id='".$record['filmopis_id']."'
  3. ?>


Walczylem z tym i udalo mi sie doprowadzic do stanu w ktorym wyswietlal dwa nazwiska, ale te same sad.gif

Tak jak sie spodziewalem problem z tymi zapytaniami tkwi w rozplanowaniu mojej bazy. Wydaje mi sie ze tym zapytaniom brakuje gatunku i serii. Probowalem je dolaczyc. Blad znikal, ale rezultat juz opisalem. Gatunek i seria sa polaczone relacja jeden do wielu z filmopis. Te klucze sa rowniez wymagane w relacji wiele do wielu. Wiem to bpo bez tego nie dzialaja mi niektore zapytania. Probowalem juz wielu kombinacji.

Z powazaniem
zicher
phobos
zamiast tego zapytania z join wklej te

  1. <?php
  2.  
  3. $query2=mysql_query("SELECT rezysernazwa FROM rezyser r ,filmopis_rezyser fr WHERE r.rezyser_id=
    fr.rezyser_id AND fr.filmopis_id='"
    .$record['filmopis_id']."'");
  4. $result2=implode(",",mysql_fetch_array($query2));
  5. $query3=mysql_query("select krajnazwa FROM kraj k ,filmopis_kraj fk WHERE k.kraj_id=fk.kraj_id A
    ND fk.filmopis_id='"
    .$record['filmopis_id']."'");
  6. $result3=implode(",",mysql_fetch_array($query3));
  7.  
  8. ?>
zicher
Witam

phobos Hmm po wpisaniu tego co podales pojawia sie juz tylko:

Kod
Warning: implode(): Bad arguments. in c:\usr\krasnal\www\paladyn\kolekcje\filmseria.php on line 45

Warning: implode(): Bad arguments. in c:\usr\krasnal\www\paladyn\kolekcje\filmseria.php on line 47


Dodam jeszcze ze wszedlem do kategorii z 7 filmami (11 linkow) i policzylem ile takich par warningowych pojawilo sie w petli. I wyszlo ze 11

Moze ja cos chrzanie. Podaje caly kod moze gdzies popelnilem jakis blad.

  1. <?php
  2. $zapytanie = "SELECT * 
  3. FROM gatunek,
  4. seria, filmopis, kraj, filmopis_kraj, rezyser, filmopis_rezyser WHERE gatunek.ga
    tunek_id=filmopis.gatunek_id AND seria.seria_id=filmopis.seria_id AND filmopis.fi
    lmopis_id=filmopis_kraj.filmopis_id AND kraj.kraj_id=filmopis_kraj.kraj_id AND fi
    lmopis.filmopis_id=filmopis_rezyser.filmopis_id AND rezyser.rezyser_id=filmopis_r
    ezyser.rezyser_id and seria.seria_id=filmopis_kraj.seria_id and gatunek.gatunek_i
    d=filmopis_kraj.gatunek_id and seria.seria_id=filmopis_rezyser.seria_id and gatun
    ek.gatunek_id=filmopis_rezyser.gatunek_id AND seria.seria_id='$seria' AND gatunek.gatunek_id='$gatunek' ORDER BY rok"
    ;
  5. $wynik = mysql_query($zapytanie);
  6. $i = 0;
  7. while ($rekord = mysql_fetch_array($wynik))
  8. {
  9. $query2=mysql_query("SELECT rezysernazwa FROM rezyser r ,filmopis_rezyser fr WHERE r.rezyser_id=
    fr.rezyser_id AND fr.filmopis_id='"
    .$record['filmopis_id']."'");
  10. $result2=implode(",",mysql_fetch_array($query2));
  11. $query3=mysql_query("select krajnazwa FROM kraj k ,filmopis_kraj fk WHERE k.kraj_id=fk.kraj_id A
    ND fk.filmopis_id='"
    .$record['filmopis_id']."'");
  12. $result3=implode(",",mysql_fetch_array($query3));
  13.  
  14. echo '<tr class="pal">';
  15. echo '<td width="45"><div align="center">'.++$i.'</div></td>';
  16. echo '<td width="200"><div align="center"><a href="filmopis.php?gatunek='.$gatunek.'&seria='.$seria.'&filmopis='.$rekord['filmopis_id'].'">'.$rekord['filmopisnazwaorg'].'</a></div></td>';
  17. echo '<td width="200"><div align="center"><a href="filmopis.php?gatunek='.$gatunek.'&seria='.$seria.'&filmopis='.$rekord['filmopis_id'].'">'.$rekord['filmopisnazwapol'].'</a></div></td>';
  18.  
  19. echo '<td width="50"><div align="center">'.$rekord['rok'].'</div></td>';
  20. echo '<td width="150"><div align="center">'.$result2.'</div></td>';
  21. echo '<td width="100"><div align="center">'.$result3.'</div></td>';
  22.  
  23. $stan = $rekord['stan'];
  24. if($stan == 1)
  25. {
  26. echo '<td width="50"><div align="center"><font class="greenb">Jest</font></div></td>';
  27. }
  28. else
  29. {
  30. echo '<td width="50"><div align="center"><font class="redb">Brak</font></div></td>';
  31. }
  32. echo '</tr>';
  33. }
  34. ?>


z powazaniem
zicher
zicher
Wszystko dziala Wielkie dzieki

Z powazaniem
zicher
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.