Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Jeden z dwoch problemow
Forum PHP.pl > Forum > Przedszkole
zicher
Witam

Mam dwa nastepujace problemy. W tym poscie opisze pierwszy z nich.


1. Mam na mysli zliczanie rekordow w bazie przy danych warunkach

Sprawa wyglada nastepujaco

Mam relacyjna baze danych (mysql) o nazwie gazety z takimi oto tablicami:

*Tablica gazeta
gazeta_id int(11)
tytul_id int(11)
rocznik int(11)
numer int(11)
numerwew varchar(255)
rodzaj_id int(11)
sklad varchar(255)
grafika varchar(255)
stan int(11)
ilosc int(11)

*Tablica kraj
kraj_id int(11)
nazwakraju varchar(255)
e_order int(11)

*Tablica rodzaj
rodzaj_id int(11)
rodzajnazwa varchar(255)
e_order int(11)

*Tablica tematyka
tematyka_id int(11)
tematykanazwa varchar(255)
e_order int(11)

*Tablica tytul
tytul_id int(11)
tytul varchar(255)
e_order int(11)
stantytulu varchar(255)
tematyka_id int(11)
kraj_id int(11)

Menu generuje przez php na zasadzie najpierw strona.php?tematyka=$rekord['tematyka_id'] a nastepnie na nastepnej stronie pobieram tematyke getem

I tak podzielilem strony na menu ze wzgledu na tematyke
wygenerowalem tytuly. Po kliknieciu na tytul wygenerowalem roczniki owych tytulow
po kliknieciu na roczniki generuje poszczegolne gazety (liste) a nastepnie dany numer gazety

Problem pojawil sie kiedy probuje w liscie rocznikow wygenerowac obok rocznika ilosc gazet w danym roczniku wychodza mi jakies bzdury. Ponizej wklejam swoj kod i prosze o pomoc w znalezieniu bledu.

  1. <?
  2. $_GET['tematyka_id'] = $tematyka;
  3. $_GET['tytul_id'] = $tytul;
  4. if(!isset($tematyka)){$tematyka = 1;}
  5. if(!isset($tytul)){$tytul = 1;}
  6.  
  7. echo '<tr class="pal">';
  8. echo '<td colspan="5" width="845"><div align="left"><a href="gazety.php">Gazety</a> - <a href="gazetyzaz?tematyka='.$tematyka.'">Tytuły</a></div></td>';
  9. echo '</tr>';
  10. echo '<tr class="pal">';
  11. echo '<td colspan="5" width="845"><br></td>';
  12. echo '</tr>';
  13. ?>
  14.  
  15. <tr class="nbb">
  16. <td width="45"><div align="center">Nr.</div></td>
  17. <td width="300"><div align="center">Rocznik</div></td>
  18. <td width="200"><div align="center">Rodzaj</div></td>
  19. <td width="100"><div align="center">Ilo&para;ć</div></td>
  20. <td width="200"><div align="center">% posiadania</div></td>
  21. </tr>
  22. <?
  23. $zapytanie = "SELECT * FROM tytul, gazeta, rodzaj, tematyka WHERE tytul.tematyka_id=temat
    yka.tematyka_id AND gazeta.tytul_id=tytul.tytul_id AND gazeta.rodzaj_id=rodzaj.ro
    dzaj_id AND tematyka.tematyka_id='$tematyka' AND tytul.tytul_id='$tytul' ORDER BY rocznik DESC"
    ;
  24. $wynik = mysql_query($zapytanie);
  25. $i = 0;
  26. $rocznik = array();
  27. while ($rekord = mysql_fetch_array($wynik))
  28. {
  29.  
  30. $rekord['rocznik'] = strtolower($rekord['rocznik']);
  31. array_push($rocznik, $rekord['rocznik']);
  32. $rocznik2 = array_count_values($rocznik);
  33. if($rocznik2[$rekord['rocznik']] == 1){
  34. $odnosnik = preg_replace('/ /', '%20', $rekord['rocznik']);
  35.  
  36.  
  37. echo '<tr class="pal">';
  38. echo '<td width="45"><div align="center">'.++$i.'</div></td>';
  39. echo '<td width="300"><div align="center"><a href="gazetyrocznik.php?tematyka='.$tematyka.'&tytul='.$tytul.'&rocznik='.$odnosnik.'">'.$rekord['rocznik'].'</a></div></td>';
  40. echo '<td width="200"><div align="center">',$rekord['rodzajnazwa'],'</div></td>';
  41.  
  42. $pytam = "SELECT Count(gazeta_id) FROM tytul, gazeta, rodzaj, tematyka WHERE tytul.tematyka_id=tematyka.tema
    tyka_id AND gazeta.tytul_id=tytul.tytul_id AND gazeta.rodzaj_id=rodzaj.rodzaj_id 
    AND tematyka.tematyka_id='$tematyka' AND tytul.tytul_id='$tytul' AND rocznik='$odnosnik'"
    ;
  43.  
  44. $wyniki = mysql_query($pytam);
  45. $rekordy = mysql_fetch_array($wyniki);
  46. echo '<td width="200"><div align="center">'.Count('gazeta_id').'</div></td>';
  47. echo '<td width="200"><div align="center">% posiadania</div></td>';
  48. echo '</tr>';
  49. }
  50. }
  51. ?>
  52. </table>


Tak naprawde nie zle dziala tylko kod od drugiego zapytania ($pytam). Co ciekawe w phpmyadmin w sql wrzucilem zapytanie zamieniajac zmienne na odpowiednie i okazuje sie ze zapytanie jest dobrze.
Oto co mi zwrocil sql

zapytanie SQL:
  1. SELECT Count( gazeta_id )
  2. FROM tytul, gazeta, rodzaj, tematyka
  3. WHERE tytul.tematyka_id = tematyka.tematyka_id AND gazeta.tytul_id = tytul.tytul_id AND gazeta.rodzaj_id = rodzaj.rodzaj_id AND tematyka.tematyka_id = '3' AND tytul.tytul_id = '2' AND gazeta.rocznik = '2005';


Cytat
Count(gazeta_id) 
226


Nie rozumiem dlaczego zatem echo '<td width="200"><div align="center">'.Count('gazeta_id').'</div></td>'; zwraca mi liczby 147, 0 ,1 albo nic nie zwraca i nie wypisuje bledu

Bardzo prosze o informacje dlaczego tak jest oraz jesli to nie jest problem jak powinno to wygladac w moim kodzie.

Z powarzaniem
Zicher


Poza [ b ] mamy też [ php ] i [ sql ]. Proszę używać pełnego zestawu tagów bbCode.
~mike_mech
TomASS
Zapytanie:
  1. <?php
  2.  
  3. $pytam = "SELECT Count(gazeta_id) AS SUMA FROM tytul, gazeta, rodzaj, tematyka WHERE tytul.tematyka_id=temat
    yka.tematyka_id AND gazeta.tytul_id=tytul.tytul_id AND gazeta.rodzaj_id=rodzaj.ro
    dzaj_id AND tematyka.tematyka_id='$tematyka' AND tytul.tytul_id='$tytul' AND rocznik='$odnosnik'"
    ;
  4.  
  5. $wyniki = mysql_query($pytam);
  6. $rekordy = mysql_fetch_array($wyniki);
  7.  
  8. ?>


A poźniej wyświetlenie:
  1. <?php
  2.  
  3. echo '<td width="200"><div align="center">'.$rekordy['SUMA'].'</div></td>';
  4. echo '<td width="200"><div align="center">% posiadania</div></td>';
  5. echo '</tr>';
  6. ?>


Problem leży, że zwrócony wynik masz w tablicy asocjacyjnej o nazwie $rekordy (a właściwie tylko pierwszy zwrócony rekord) i do sumy możesz dostać się poprzez $rekordy['SUMA'], definiując wcześniej w zapytaniu Count(gazeta_id) AS SUMA.
kożystaj z bbcode smile.gif
ikioloak
1. bbcode!
2. mimo wszystko cos wylookalem. wydaje mi sie ze tutaj:
  1. <?php
  2. $pytam = "SELECT Count(gazeta_id) (...) "
  3. ?>

powinno byc
  1. <?php
  2.  $pytam = "SELECT Count(gazeta_id) as ilosc (...)" 
  3. ?>

i wtedy tak jak masz:
  1. <?php
  2. $wyniki = mysql_query($pytam);
  3. $rekordy = mysql_fetch_array($wyniki);
  4.  
  5. ?>

ale kolejna linia:
  1. <?php
  2.  echo '<td width="200"><div align="center">'.$rekordy['ilosc'].'</div></td>';
  3. ?>


Nie sprawdzalem tego, ale ja bym tak napisal, wiec moze bedzie dzialac:)
Edit: TomASS byl szybszy (wszystko przez gg:P)
zicher
Witam ponownie

Dziekuje serdecznie za informacje. Mam tylko pytanie czy wszystkie szukane selectem dane mozna zapisc za pomoca tego AS nazwa i potem wrzucic do zmiennej?

Chcialbym takze poprosic o pomoc w jeszcze jednej kwestii

Sprawa wydawala sie byc prosta, a okazuje sie ze nie moge sobie z tym poradzic

Otoz podanym uprzedmio kodzie strony znajduje sie tabelka (tuz na pierwszym zapytaniem)

  1. <tr class="nbb">
  2. <td width="45"><div align="center">Nr.</div></td>
  3. <td width="300"><div align="center">Rocznik</div></td>
  4. <td width="200"><div align="center">Rodzaj</div></td>
  5. <td width="100"><div align="center">Ilo&para;ć</div></td>
  6. <td width="200"><div align="center">% posiadania</div></td>
  7. </tr>


Chcialem by niektore nazwy kolumn byly linkami sortujacymi dane wedlug ich nazw oczewiscie na tetj samej stronie. I wymyslilem cos takiego:

  1. <?
  2. if(!isset($orderby)){$orderby = 'numer';}
  3. if(!isset($kierunek)){$kierunek = '';}
  4. $pytam = "SELECT * FROM tytul, gazeta, rodzaj, tematyka WHERE tytul.tematyka_id=temat
    yka.tematyka_id AND gazeta.tytul_id=tytul.tytul_id AND gazeta.rodzaj_id=rodzaj.ro
    dzaj_id AND tematyka.tematyka_id='$tematyka' AND tytul.tytul_id='$tytul' AND gazeta.rocznik='$rocznik' AND numer !='' ORDER BY $orderby $kierunek"
    ;
  5. $menu = "<tr class="nbb"><td width="45"><div align="center">Nr.</div></td>
  6. <td width="350"><div align="center">Tytuł</div></td>
  7. <td width="100"><div align="center"><a href="gazetyrocznik.php?tematyka=".$tematyka."&tytul=".$tytul."&rocznik=".$rocznik."&orderby=rodzaj">Rodzaj</a></div></td>
  8. <td width="50"><div align="center"><a href="gazetyrocznik.php?tematyka=".$tematyka."&tytul=".$tytul."&rocznik=".$rocznik."&orderby=numer">Numer</a></div></td>
  9. <td width="200"><div align="center"><a href="gazetyrocznik.php?tematyka=".$tematyka."&tytul=".$tytul."&rocznik=".$rocznik."&orderby=numerwew">Numer Wew</a></div></td>
  10. <td width="100"><div align="center">Posiadanie</div></td></tr>";
  11. $wyniki = mysql_query($pytam);
  12. echo $menu
  13. ?>


Jest to kod co prawda z nastepnej strony, stad pojawienie sie tytulu i inne dlugosci td. Problem polega na tym, ze strona sie wyswietla z danymi ale nie sortuje.

Pozdrawiam
Zicher

----edit----
Ostatni raz poprawiam Twój kod, kolejnym razem tego nie zrobię.
Ostrzeżenie i tak dostajesz.
~mike_mech
kszychu
Kolego zicher. MIke_mech już raz Cię poprawił i upomniał, że należu używać bbcode. Drugiego upomnienia nie będzie, więc lepiej popraw swój ostatni post zgodnie z zasadami opisanymi w Regulaminie!
TomASS
Cytat
Mam tylko pytanie czy wszystkie szukane selectem dane mozna zapisc za pomoca tego AS nazwa i potem wrzucic do zmiennej


TAK.

Co do sortowania to dodaj na początku skryptu:
  1. <?php
  2.  
  3. $orderby = $_REQUEST['orderby'];
  4. $kierunek = $_REQUEST['kierunek'];
  5.  
  6. ?>


I najważniejsza sprawa! Stosuj BB Code!
zicher
Witam ponownie

Przepraszam za to bb code Myslalem ze to dotyczy mojego kodu na stronie i mialem zamiar dopiero poszukac informacji co to jest.

Juz sie zorientowalem ze chodzi o podawanie kodu w odpowienich tagach.

Dziekuje za informacje i jeszcze raz przepraszam

Pozdrawiam
Zicher

----edit----
Raz Cię poprawiłem i upomniałem. Kolejnego posta napisałeś ponownie bez użycia bbCode'u i nie poprawiłes tego nawet na prośbę moderatora.
W tej sytuacji pozostaje mi tylko dać Ci ostrzeżenie.
~mike_mech
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.