Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

2 Stron V   1 2 >  
Reply to this topicStart new topic
> [PHP][MySQL]Spis kategorii
adrianozo
post 27.11.2009, 17:13:06
Post #1





Grupa: Zarejestrowani
Postów: 733
Pomógł: 4
Dołączył: 11.11.2009

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


Witam.
Nie mam zupełnie pomysłu jak się zabrać do czegoś takiego:

Kod
Kategorie:
medycyna (5)
programowanie (55)
jfkanfnanfkdn (258)
nfskdfjnjfnjsn (2)
..
...
...
itp.


Mam pytanie. Jak się zabrać do czegoś takiego, że odczytuje mi z bazy danych wszystkie kategorie zlicza mi ile jest rekordów z kategorią medycyna pokazuje, że 5.
Mógłbym prosić o pomoc jak to ugryźć?
Z góry dziękuje smile.gif


--------------------
Go to the top of the page
+Quote Post
b4x
post 27.11.2009, 17:17:51
Post #2





Grupa: Zarejestrowani
Postów: 658
Pomógł: 95
Dołączył: 20.12.2005
Skąd: N54,35° E18,63° (Gdańsk)

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


Tworzysz tabelę:

kategorie a w niej kolumny id | nazwa

oraz np:

wpisy a w niej kolumny id | nazwa | kategoria.


Później np:
  1. SELECT count(*) AS `ilosc_wpisow` FROM `wpisy` WHERE `kategoria` = "1"



--------------------
Go to the top of the page
+Quote Post
adrianozo
post 27.11.2009, 17:20:25
Post #3





Grupa: Zarejestrowani
Postów: 733
Pomógł: 4
Dołączył: 11.11.2009

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


Ale ja mam tabele artykuły i tam:
id
tytuł
info
kategoria
zdjęcie
data


--------------------
Go to the top of the page
+Quote Post
b4x
post 27.11.2009, 17:23:57
Post #4





Grupa: Zarejestrowani
Postów: 658
Pomógł: 95
Dołączył: 20.12.2005
Skąd: N54,35° E18,63° (Gdańsk)

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


Aha - no więc:

  1. $id_kategorii = 1; // tutaj podajesz ID kategorii
  2.  
  3. $ilosc = mysql_result(mysql_query('SELECT count(*) FROM `artykuly` WHERE `kategoria` = "'.$id_kategorii.'"'), 0);
  4. print $ilosc;


--------------------
Go to the top of the page
+Quote Post
adrianozo
post 27.11.2009, 17:24:43
Post #5





Grupa: Zarejestrowani
Postów: 733
Pomógł: 4
Dołączył: 11.11.2009

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


ale nie kategoria ma rekord tylko artykuł


--------------------
Go to the top of the page
+Quote Post
b4x
post 27.11.2009, 17:26:30
Post #6





Grupa: Zarejestrowani
Postów: 658
Pomógł: 95
Dołączył: 20.12.2005
Skąd: N54,35° E18,63° (Gdańsk)

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


Tak przecież wiem o tym - dlatego sumujesz wszystkie wyniki z tabeli artykuly za pomocą count(*) gdzie kategoria = id kategorii smile.gif


--------------------
Go to the top of the page
+Quote Post
adrianozo
post 27.11.2009, 17:31:46
Post #7





Grupa: Zarejestrowani
Postów: 733
Pomógł: 4
Dołączył: 11.11.2009

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


Nie rozumiem.


--------------------
Go to the top of the page
+Quote Post
b4x
post 27.11.2009, 17:32:59
Post #8





Grupa: Zarejestrowani
Postów: 658
Pomógł: 95
Dołączył: 20.12.2005
Skąd: N54,35° E18,63° (Gdańsk)

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


Podaj swój kod PHP jak pobierasz wyniki - to pokażę Tobie. smile.gif


--------------------
Go to the top of the page
+Quote Post
adrianozo
post 27.11.2009, 17:47:19
Post #9





Grupa: Zarejestrowani
Postów: 733
Pomógł: 4
Dołączył: 11.11.2009

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


Struktura

  1. CREATE TABLE IF NOT EXISTS `artykuly` (
  2. `id` int(11) NOT NULL AUTO_INCREMENT,
  3. `tytul` varchar(60) character SET utf8 collate utf8_polish_ci NOT NULL,
  4. `info` longtext character SET utf8 collate utf8_polish_ci NOT NULL,
  5. `kategoria` varchar(60) character SET utf8 collate utf8_polish_ci NOT NULL,
  6. `cena` varchar(60) character SET utf8 collate utf8_polish_ci NOT NULL,
  7. `zdjecie` varchar(100) character SET utf8 collate utf8_polish_ci NOT NULL,
  8. `data` datetime NOT NULL,
  9. PRIMARY KEY (`id`)
  10. ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=23 ;


lewa.php

  1. <?php
  2. ini_set('error_reporting', E_ALL | E_STRICT);
  3. ini_set('display_errors', 'Off');
  4. ini_set('log_errors', 'On');
  5. ini_set('error_log', 'full-path-to-a-log-file');
  6. ?>
  7. <?php
  8. if (!isset($_SESSION['sprawdz']))
  9. {
  10. $_SESSION['sprawdz'] = true;
  11. }
  12. $connect = mysql_connect('localhost', 'root', 'pass') or die('Nie mo&#x17C;na poł&#x105;czyc si&#x119; z baz&#x105; danych. Przepraszamy za kłopoty');
  13. $db = mysql_select_db('db') or die('Nie mo&#x17C;na poł&#x105;czyc si&#x119; z baz&#x105; danych. Przepraszamy za kłopoty');
  14. stripslashes($zap = "SELECT `kategoria` FROM `artykuly` ORDER BY `id`");
  15. $idzap = mysql_query($zap);
  16. while($fetch=mysql_fetch_array($idzap))
  17. {
  18. echo'<div style="text-align:center;">'.$fetch[4].'<br /></div>';
  19. }
  20. mysql_close($connect);
  21. ?>


Na moje oko to trzeba najpierw pobrać wszystkie kategorie następnie posortować od a do z, a następnie zliczyć ile rekordów pasuje do danej kategorii.


--------------------
Go to the top of the page
+Quote Post
b4x
post 27.11.2009, 17:50:06
Post #10





Grupa: Zarejestrowani
Postów: 658
Pomógł: 95
Dołączył: 20.12.2005
Skąd: N54,35° E18,63° (Gdańsk)

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


  1. <?php
  2. ini_set('error_reporting', E_ALL | E_STRICT);
  3. ini_set('display_errors', 'Off');
  4. ini_set('log_errors', 'On');
  5. ini_set('error_log', 'full-path-to-a-log-file');
  6. ?>
  7.  
  8. <?php
  9. if (!isset($_SESSION['sprawdz']))
  10. {
  11. $_SESSION['sprawdz'] = true;
  12. }
  13. $connect = mysql_connect('localhost', 'root', 'pass') or die('Nie mo&#x17C;na poł&#x105;czyc si&#x119; z baz&#x105; danych. Przepraszamy za kłopoty');
  14. $db = mysql_select_db('db') or die('Nie mo&#x17C;na poł&#x105;czyc si&#x119; z baz&#x105; danych. Przepraszamy za kłopoty');
  15. stripslashes($zap = "SELECT `kategoria` FROM `artykuly` ORDER BY `id`");
  16. $idzap = mysql_query($zap);
  17. while($fetch=mysql_fetch_array($idzap))
  18. {
  19. $ilosc_artow_w_kat = mysql_result(mysql_query('SELECT count(*) FROM `artykuly` WHERE `kategoria` = "'.$fetch[4].'"'), 0);
  20. echo'<div style="text-align:center;">'.$fetch[4].' ('.$ilosc_artow_w_kat.')<br /></div>';
  21. }
  22. mysql_close($connect);
  23. ?>


--------------------
Go to the top of the page
+Quote Post
adrianozo
post 27.11.2009, 17:54:48
Post #11





Grupa: Zarejestrowani
Postów: 733
Pomógł: 4
Dołączył: 11.11.2009

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


Kod
(12)
(12)
(12)
(12)
(12)
(12)
(12)
(12)
(12)
(12)
(12)
(12)
sdasd (12)
Kategoriadasd (12)
asdad (12)
qpa (12)
proba3 (12)


Wyszło takie coś
Dlaczego w każdym nawiasie jest ta sama liczba i w ogóle dlaczego 12?


--------------------
Go to the top of the page
+Quote Post
b4x
post 27.11.2009, 17:59:01
Post #12





Grupa: Zarejestrowani
Postów: 658
Pomógł: 95
Dołączył: 20.12.2005
Skąd: N54,35° E18,63° (Gdańsk)

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


  1. <?php
  2. ini_set('error_reporting', E_ALL | E_STRICT);
  3. ini_set('display_errors', 'Off');
  4. ini_set('log_errors', 'On');
  5. ini_set('error_log', 'full-path-to-a-log-file');
  6. ?>
  7.  
  8. <?php
  9. if (!isset($_SESSION['sprawdz']))
  10. {
  11. $_SESSION['sprawdz'] = true;
  12. }
  13. $connect = mysql_connect('localhost', 'root', 'pass') or die('Nie mo&#x17C;na poł&#x105;czyc si&#x119; z baz&#x105; danych. Przepraszamy za kłopoty');
  14. $db = mysql_select_db('db') or die('Nie mo&#x17C;na poł&#x105;czyc si&#x119; z baz&#x105; danych. Przepraszamy za kłopoty');
  15.  
  16. stripslashes($zap = "SELECT DISTINCT `kategoria` FROM `artykuly` ORDER BY `id`");
  17. $idzap = mysql_query($zap);
  18.  
  19. while($fetch=mysql_fetch_array($idzap))
  20. {
  21. $ilosc_artow_w_kat = mysql_result(mysql_query('SELECT count(*) FROM `artykuly` WHERE `kategoria` = "'.$fetch[4].'"'), 0);
  22. echo'<div style="text-align:center;">'.$fetch[4].' ('.$ilosc_artow_w_kat.')<br /></div>';
  23. }
  24. mysql_close($connect);
  25. ?>
  26.  


Zobacz to


--------------------
Go to the top of the page
+Quote Post
adrianozo
post 27.11.2009, 18:03:31
Post #13





Grupa: Zarejestrowani
Postów: 733
Pomógł: 4
Dołączył: 11.11.2009

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


Dzięki wielkie.
Działa. Plusik leci.

A mógłbyś mi wyjaśnić co to znaczy w zapytaniu DISTINCT?


--------------------
Go to the top of the page
+Quote Post
b4x
post 27.11.2009, 18:08:22
Post #14





Grupa: Zarejestrowani
Postów: 658
Pomógł: 95
Dołączył: 20.12.2005
Skąd: N54,35° E18,63° (Gdańsk)

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


Cytat
DISTINCT jest używany wraz z instrukcją SELECT. Określa, że wiersze powtarzające się powinny zostać usunięte przed zwróceniem ich na zewnątrz. Dwa wiersze traktuje się jako równe jeśli wszystkie wartości dla każdej z kolumn zwracanych rozkazem SELECT są sobie równe.



--------------------
Go to the top of the page
+Quote Post
adrianozo
post 27.11.2009, 20:14:39
Post #15





Grupa: Zarejestrowani
Postów: 733
Pomógł: 4
Dołączył: 11.11.2009

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


Dzięki wielkie smile.gif
Kolejny plusik smile.gif

Jeszcze mam jedno pytanie.
Zdefiniowałem adresy:
np.
index.php?page=nazwa_kategorii
i teraz pytanie jak zrobić, że jak wejdę na ten adres to pokażą się wszystkie artykuły należące do danej kategorii?
Menu nie jest postawione na bazie danych

Chcę jeszcze dodać, że podczas tworzenia zmiennej $_GET dodałem klauzule

  1. default :
  2. echo '<div style="text-align:center;">Wystąpił błąd.<br /> Niepoprawna nazwa pliku.</div>';
  3. break;


--------------------
Go to the top of the page
+Quote Post
b4x
post 27.11.2009, 21:17:10
Post #16





Grupa: Zarejestrowani
Postów: 658
Pomógł: 95
Dołączył: 20.12.2005
Skąd: N54,35° E18,63° (Gdańsk)

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


  1. <?php
  2.  
  3. $kategoria = (string) $_GET['page'];
  4.  
  5. // Sprawdź czy kategoria istnieje
  6.  
  7. if(mysql_num_rows(mysql_query('SELECT `id` FROM `artykuly` WHERE `kategoria` = "'.$kategoria.'"')) === 0) return FALSE; // Kategoria nie istnieje!
  8.  
  9. $artykuly = mysql_query ('SELECT * FROM `artykuly` WHERE `kategoria` = "'.$kategoria.'"');
  10.  
  11. while($row=mysql_fetch_assoc($artykuly))
  12. {
  13. print_r($row); // Dopasuj sobie sam :-)
  14. }
  15.  
  16. ?>


Ten post edytował b4x 27.11.2009, 21:17:33


--------------------
Go to the top of the page
+Quote Post
adrianozo
post 27.11.2009, 21:26:44
Post #17





Grupa: Zarejestrowani
Postów: 733
Pomógł: 4
Dołączył: 11.11.2009

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


Ale on nie może tego szukać w bazie tylko w zmiennej $_GET


--------------------
Go to the top of the page
+Quote Post
b4x
post 27.11.2009, 21:29:15
Post #18





Grupa: Zarejestrowani
Postów: 658
Pomógł: 95
Dołączył: 20.12.2005
Skąd: N54,35° E18,63° (Gdańsk)

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


Pokaż cały kod - bo nie za bardzo rozumiem Ciebie, jakby to miało wyglądać. :-)


--------------------
Go to the top of the page
+Quote Post
adrianozo
post 27.11.2009, 21:36:50
Post #19





Grupa: Zarejestrowani
Postów: 733
Pomógł: 4
Dołączył: 11.11.2009

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


A kurde... sory moja pomyłka....
Robię dwa pliki na raz i mi się pomyliło

  1. <?php
  2. ini_set('error_reporting', E_ALL | E_STRICT);
  3. ini_set('display_errors', 'Off');
  4. ini_set('log_errors', 'On');
  5. ini_set('error_log', 'full-path-to-a-log-file');
  6. ?>
  7. <?php
  8. if (!isset($_SESSION['sprawdz']))
  9. {
  10. $_SESSION['sprawdz'] = true;
  11. }
  12. $connect = mysql_connect('localhost', 'root', 'pass') or die('Nie mo&#x17C;na poł&#x105;czyc si&#x119; z baz&#x105; danych. Przepraszamy za kłopoty');
  13. $db = mysql_select_db('db') or die('Nie mo&#x17C;na poł&#x105;czyc si&#x119; z baz&#x105; danych. Przepraszamy za kłopoty');
  14. stripslashes($zap = "SELECT DISTINCT `kategoria` FROM `artykuly` ORDER BY `kategoria` ASC");
  15. $idzap = mysql_query($zap);
  16. while($fetch=mysql_fetch_assoc($idzap))
  17. {
  18. $ilosc = mysql_result(mysql_query('SELECT count(*) FROM `artykuly` WHERE `kategoria` = "'.$fetch['kategoria'].'"'), 0);
  19. echo'<div style="text-align:center;"><a style="text-decoration: none;" href="index.php?page='.$fetch['kategoria'].'">'.$fetch['kategoria'].'</a> ('.$ilosc.')<br /></div>';
  20. }
  21. mysql_close($connect);
  22. ?>
  23.  
  24. $kategoria = (string) $_GET['page'];
  25. if(mysql_num_rows(mysql_query('SELECT `id` FROM `artykuly` WHERE `kategoria` = "'.$kategoria.'"')) === 0) return FALSE;
  26. $artykuly = mysql_query ('SELECT * FROM `artykuly` WHERE `kategoria` = "'.$kategoria.'"');
  27. while($row=mysql_fetch_assoc($artykuly))


Nie bardzo wiem co gdzie mam dać ponieważ wcześniej było

SELECT count(*) i SELECT DISTINCT
a teraz tego nie ma...
Mógłbyś pomóc?


--------------------
Go to the top of the page
+Quote Post
b4x
post 27.11.2009, 21:42:53
Post #20





Grupa: Zarejestrowani
Postów: 658
Pomógł: 95
Dołączył: 20.12.2005
Skąd: N54,35° E18,63° (Gdańsk)

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


  1. <?php
  2. ini_set('error_reporting', E_ALL | E_STRICT);
  3. ini_set('display_errors', 'Off');
  4. ini_set('log_errors', 'On');
  5. ini_set('error_log', 'full-path-to-a-log-file');
  6. ?>
  7. <?php
  8. if (!isset($_SESSION['sprawdz']))
  9. {
  10. $_SESSION['sprawdz'] = true;
  11. }
  12. $connect = mysql_connect('localhost', 'root', 'pass') or die('Nie mo&#x17C;na poł&#x105;czyc si&#x119; z baz&#x105; danych. Przepraszamy za kłopoty');
  13. $db = mysql_select_db('db') or die('Nie mo&#x17C;na poł&#x105;czyc si&#x119; z baz&#x105; danych. Przepraszamy za kłopoty');
  14. stripslashes($zap = "SELECT DISTINCT `kategoria` FROM `artykuly` ORDER BY `kategoria` ASC");
  15. $idzap = mysql_query($zap);
  16. while($fetch=mysql_fetch_assoc($idzap))
  17. {
  18. $ilosc = mysql_result(mysql_query('SELECT count(*) FROM `artykuly` WHERE `kategoria` = "'.$fetch['kategoria'].'"'), 0);
  19. echo'<div style="text-align:center;"><a style="text-decoration: none;" href="index.php?page='.urlencode($fetch['kategoria']).'">'.$fetch['kategoria'].'</a> ('.$ilosc.')<br /></div>';
  20. }
  21.  
  22. if($_GET['page'] !== "")
  23. {
  24. $kategoria = (string) $_GET['page'];
  25. if(mysql_num_rows(mysql_query('SELECT `id` FROM `artykuly` WHERE `kategoria` = "'.$kategoria.'"')) !== 0)
  26. {
  27. $artykuly = mysql_query ('SELECT * FROM `artykuly` WHERE `kategoria` = "'.$kategoria.'"');
  28. while($row=mysql_fetch_assoc($artykuly))
  29. {
  30. print_r($row);
  31. }
  32. }
  33. else
  34. {
  35. print 'Brak artykułów dla podanej kategorii.';
  36. }
  37. }
  38. mysql_close($connect);
  39. ?>


--------------------
Go to the top of the page
+Quote Post

2 Stron V   1 2 >
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: 28.04.2024 - 02:54