Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP][MYSQL]
-krispak-
post
Post #1





Goście







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
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 6)
grzemach
post
Post #2





Grupa: Zarejestrowani
Postów: 121
Pomógł: 4
Dołączył: 9.06.2007
Skąd: Kielce

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


Pisane z palca może gdzieś być błąd:
[MYSQL] pobierz, plaintext
[MYSQL] pobierz, plaintext


Ten post edytował grzemach 27.08.2008, 12:14:07
Go to the top of the page
+Quote Post
krispak
post
Post #3





Grupa: Zarejestrowani
Postów: 250
Pomógł: 55
Dołączył: 27.08.2008

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


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


Ten post edytował krispak 27.08.2008, 13:42:35
Go to the top of the page
+Quote Post
v1t4n
post
Post #4





Grupa: Zarejestrowani
Postów: 111
Pomógł: 16
Dołączył: 19.02.2005
Skąd: Dębica

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


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.
Go to the top of the page
+Quote Post
krispak
post
Post #5





Grupa: Zarejestrowani
Postów: 250
Pomógł: 55
Dołączył: 27.08.2008

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


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

Ten post edytował krispak 27.08.2008, 13:50:21
Go to the top of the page
+Quote Post
grzemach
post
Post #6





Grupa: Zarejestrowani
Postów: 121
Pomógł: 4
Dołączył: 9.06.2007
Skąd: Kielce

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


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





Grupa: Zarejestrowani
Postów: 250
Pomógł: 55
Dołączył: 27.08.2008

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


wrzucilem zapytanie do phpmyadmin - dziala (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
wrzucilem na strone - dzial (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
tak wiec blad byl w moim kodzie gdzies w wyswietlaniu

dziekuje za pomoc

pozdrawiam
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 22.08.2025 - 11:48