Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Zliczanie pozycji..., jak to ugryzść?
Fallout
post
Post #1





Grupa: Zarejestrowani
Postów: 154
Pomógł: 0
Dołączył: 17.12.2003
Skąd: Olsztyn

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


Witam,

mam problem ze zliczeniem ilości "linków" w "kategoriach"

wyciąg z bazy:

  1. CREATE TABLE cat (
  2. cat_id Int NOT NULL AUTO_INCREMENT,
  3. cat_root Int NOT NULL,
  4. cat_name Varchar(15) NOT NULL,
  5. cat_desc Varchar(80),
  6. cat_show Bool,
  7. UNIQUE (cat_id),
  8. PRIMARY KEY (cat_id)) ENGINE = MyISAM;
  9.  
  10. CREATE TABLE links (
  11. link_id Int NOT NULL AUTO_INCREMENT,
  12. cat_id Int NOT NULL,
  13. link_date Date NOT NULL,
  14. link_title Varchar(25) NOT NULL,
  15. link_desc Varchar(100),
  16. link_www Char(60) NOT NULL,
  17. link_ok Bool NOT NULL,
  18. UNIQUE (link_www),
  19. PRIMARY KEY (link_id)) ENGINE = MyISAM;


i teraz zliczam ilosc linkow dla danej kategorii :

  1. <?php
  2.  
  3. {
  4. $sql = "SELECT Count(*) FROM links WHERE cat_id = $id";
  5. $this->db->DoSql($sql);
  6. return mysql_result($this->db->wynik,0,0);
  7. }
  8.  
  9. ?>


a taka funkcja zliczam ilosc kategorii w danej kategorii :

  1. <?php
  2.  
  3. function Count($id)
  4. {
  5.  if($id==0)
  6. $sql = "SELECT Count(*) FROM cat WHERE cat_root = 0";
  7. else
  8. $sql = "SELECT Count(*) FROM cat WHERE cat_root = $id";
  9.  
  10. $this->db->DoSql($sql);
  11. return mysql_result($this->db->wynik,0,0);
  12. }
  13.  
  14. ?>


Moje pytanie brzmi:

Jak ułożyć zapytania SQL dla zliczania wszystkich podkategorii (takze z ich podkategoriami) oraz wszystkich linkow dla danej kategorii (i ich podkategorii)
gdyz narazie udaje mi sie zliczyc tylko 1 poziom w dol...

Przyklad

- 1 (4/4)
-- 1.1 - (link1,link2)
-- 1.2
-- 1.3 (link3)
--- 1.4 (link4)

mam nadzieje ze wyrazilem sie zrozumiale (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Dla pewnosci wklejam kod wyswietlajacy kategorie :

  1. <?php
  2.  
  3. function ShowCat($id)
  4. {
  5. if($id==0)
  6. $sql = "SELECT * FROM cat WHERE cat_root = 0";
  7. else
  8. $sql = "SELECT * FROM cat WHERE cat_root = $id";
  9.  
  10. $this->db->DoSql($sql);
  11. $wynik = $this->db->wynik;
  12.  
  13. while($w = mysql_fetch_array($wynik))
  14. {
  15. $cat_id = $w['cat_id'];
  16. $cat_root = $w['cat_root'];
  17. $cat_name = $w['cat_name'];
  18. $cat_desc = $w['cat_desc'];
  19.  
  20. echo $this->LinkIt($cat_id,$cat_root);
  21. echo $cat_name."</a> <b>(</b>".$this->Count($cat_id)."/".$this->CountLinks($cat_id)."<b>)</b><br>";
  22. }
  23. }
  24.  
  25. ?>



z góry Dziękuję i pozdrawiam
Marcin
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
SongoQ
post
Post #2





Grupa: Przyjaciele php.pl
Postów: 2 923
Pomógł: 9
Dołączył: 25.10.2004
Skąd: Rzeszów - studia / Warszawa - praca

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


Cytat
Nie rozumiem tylko o co chodzi z tym INNODB? Na MyISAM wszystko chodzi, w sumie nigdy nie zwracałem na to uwagi.. w jakim sensie "wymusza relację" ?

W InnoDB masz relacje w MyISAM nie. Co to sa relacje to chyba nie musze pisac, w google pelno o tym jest. Jesli uzyjesz InnoDB i utworzysz klucz obcy wtedy mozesz przypisac co ma sie dziac jesli klucz podstawowy zostanie np usuniety. Czy ma sie pokazac blad czy usunac odwolania, czy np ustawic na NULL. Klucze obce wymuszaja pewne zachowania. Najlepiej bedzie jak sam znajdziesz info w sieci i przekonasz się do czego to sluzy.

-- Dodane
No i oczywiscie transakcje (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post

Posty w temacie


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: 26.12.2025 - 17:08