Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Jeden z dwoch problemow, Zliczanie id
zicher
post 29.09.2005, 13:32:48
Post #1





Grupa: Zarejestrowani
Postów: 35
Pomógł: 0
Dołączył: 28.09.2005

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
TomASS
post 29.09.2005, 13:52:02
Post #2





Grupa: Zarejestrowani
Postów: 1 660
Pomógł: 13
Dołączył: 9.06.2004
Skąd: Wrocław i okolice

Ostrzeżenie: (0%)
-----


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

Ten post edytował TomASS 29.09.2005, 13:54:14


--------------------
Go to the top of the page
+Quote Post
ikioloak
post 29.09.2005, 13:54:32
Post #3





Grupa: Zarejestrowani
Postów: 416
Pomógł: 0
Dołączył: 8.01.2004

Ostrzeżenie: (0%)
-----


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)

Ten post edytował ikioloak 29.09.2005, 13:56:02
Go to the top of the page
+Quote Post
zicher
post 29.09.2005, 15:13:19
Post #4





Grupa: Zarejestrowani
Postów: 35
Pomógł: 0
Dołączył: 28.09.2005

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
kszychu
post 29.09.2005, 15:17:16
Post #5





Grupa: Przyjaciele php.pl
Postów: 2 712
Pomógł: 23
Dołączył: 27.10.2003
Skąd: z kontowni

Ostrzeżenie: (0%)
-----


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!


--------------------
"Coś się kończy, coś się zaczyna." Andrzej Sapkowski
Go to the top of the page
+Quote Post
TomASS
post 29.09.2005, 15:24:53
Post #6





Grupa: Zarejestrowani
Postów: 1 660
Pomógł: 13
Dołączył: 9.06.2004
Skąd: Wrocław i okolice

Ostrzeżenie: (0%)
-----


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!

Ten post edytował TomASS 29.09.2005, 15:33:11


--------------------
Go to the top of the page
+Quote Post
zicher
post 29.09.2005, 15:39:11
Post #7





Grupa: Zarejestrowani
Postów: 35
Pomógł: 0
Dołączył: 28.09.2005

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 10.07.2025 - 05:35