Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MYSQL]
Forum PHP.pl > Forum > Przedszkole
krispak
Witam

mam w bazie trzy tabele ktore sa ze soba powiazane

Tabela NEWS
id
tekstnewsa


Tabela KATEGORIANEWSA
idnewsa
idkategorii


Tabela KATEGORIA
id
nazwa

Mam w zwiazku z tym pytanie jak powinno wygladac zapytanie aby wyswietlalo mi nazwy kategorii a obok tego wyswietlalo wynik zliczajacy ile newsow nalezy do danej kategorii??
z gory dziekuje za pomoc
pozdrawiam
grzemach
Pisane z palca może gdzieś być błąd:
[MYSQL] pobierz, plaintext
[MYSQL] pobierz, plaintext
krispak
niby wyswietla nawy kategorii ale nie wiem co robie zle w wyswietlaniu zliczania

  1. <?php
  2. $cats = @mysql_query('SELECT nazwa, (SELECT COUNT(*) AS licz from kategorianewsa where kategorianewsa.idkategorii=kategoria.id) from kategoria');
  3. if (!$cats) {
  4. exit('<p>Problem podczas pobierania kategorii z bazy danych!<br />'.
  5. 'Error: ' . mysql_error(). '</p>');
  6. }
  7. $lp=1;
  8. while ($cat = mysql_fetch_array($cats)) {
  9. $id = $cat['id'];
  10. $name = htmlspecialchars($cat['nazwa']);
  11. $licz = htmlspecialchars($cat['licz']);
  12. echo "<tr bgcolor='#f7f7f7'>".
  13.  "<td style='padding-top:5px; padding-bottom:5px;' align='center'>$lp</td>".
  14.  "<td style='padding-top:5px; padding-bottom:5px;'> $name </td>".
  15.  "<td style='padding-top:5px; padding-bottom:5px;' align='center'>$licz</td>".
  16.  "<td style='padding-top:5px; padding-bottom:5px;' align='center'><a href='editcat.php?id=$id'>Edycja</a> | <a href='deletecat.php?id=$id'>Usuń</a></td>".
  17.  "</tr>";
  18. $lp++;
  19. }
  20. ?>
v1t4n
Panowie! Uzywajcie formatowania BBCode! przeciez to nieczytelne jest!

Z MySQL jestem cienias jednak to takich rzeczy czesto robie kilka zapytan i wykorzystuje moja funkcje do tabeli relacyjnych:
  1. <?php
  2. function relation_id($table, $col, $id){
  3. $sa3="SELECT `".$col."` FROM `".PREFIX.$table."` WHERE `id` = ".$id." LIMIT 0,1";
  4. $sa4=mysql_query($sa3);
  5. while($row=mysql_fetch_array($sa4)) {
  6. return $row[0];
  7. }
  8. }
  9. ?>

Odwolanie jest bardzo proste:
  • $table - nazwa tabeli w jakiej szukamy
  • $col - nazwa kolumny z jakiej szukamy danych
  • $id - nr id w bazie

Zalozmy ze szukamy osoby w bazie w tabeli klienci gdzie mamy 3 kolumny: id (index), imie, nazwisko.
Chcąc wyciagnac imie osoby o id 69 wklepujemy w php:
  1. <?php
  2. relation_id('klienci', 'imie', 69);
  3. ?>


Uwaga
  • Funkcja zwraca wartosc - zeby wypluc wynik trzeba ja wyprintowac
  • W zapytaniu do SQL jest wpisany PREFIX - jezeli nie kozystasz z prefixu mozesz to wywalic, ale nie musisz. Przy wylaczonej obsludze raportowania bledow nic nie wyskoczy. Jezeli naromiast kozystasz z prefixu zadefiniuj go jako stala.
krispak
to jak wyswietlac wyniki raczej wiem tyko chodzi czy mam jakis blad przy wywolywaniu i czy w ogole dobrze jest napisane zapytanie mysql do zliczania bo jak wstawiam inne zapytanie typu

  1. SELECT COUNT(*) nazwa FROM kategoria, kategoriakawalu WHERE nazwa="KRAJ" AND idkategorii=kategoria.id



to owszem zlicza mi newsy z kategorii KRAJ ale nie wyswietla sie obok nazwa kategorii
a drugim problemem jest to ze w zapytaniu jest recznie wpisane KRAJ a chcialbym aby sie to odnosilo automatycznie do kazdej kategorii
grzemach
Zrób to i powiedz czy Ci działa. aby sprawdzić SQL najlepiej włącz phpmyadmina i tam wprowadź zadane zapytanie SQL, jeśli wyświetli poprawnie wyniki to znaczy że masz błąd w obróbce danych, jeśli nie masz poprawnych wyników, wrzuć na forum SQL z tworzeniem baz danych (nie chce mi się tego robić) i coś do uzupełnienia ich i Ci pomogę. Możesz to zrobić na prv lub na gg 1607158

  1. <?php
  2. $cats = @mysql_query('SELECT nazwa, (SELECT COUNT(*) AS licz from kategorianewsa where kategorianewsa.idkategorii=kategoria.id) from kategoria');
  3. if (!$cats) {
  4. exit('<p>Problem podczas pobierania kategorii z bazy danych!<br />'.
  5. 'Error: ' . mysql_error(). '</p>');
  6. }
  7. while ($cat = @mysql_fetch_row($cats)) {
  8. echo $cat[0].' '.$cat[1].'<br />';
  9. }
  10. ?>


Kolego v1t4n, w ten sposób się nie pisze, nie robi się zapytania w zapytaniu, wiesz jaki to może ruch wygenerować? załóżmy że będzie 100 kategorii w moim przypadku robimy jeden SQL i mamy wszystkie odpowiedzi, w Twoim trzeba wykonać 101 zapytań do bazy danych!
krispak
wrzucilem zapytanie do phpmyadmin - dziala smile.gif
wrzucilem na strone - dzial smile.gif
tak wiec blad byl w moim kodzie gdzies w wyswietlaniu

dziekuje za pomoc

pozdrawiam
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.