[PHP][MYSQL][SMARTY]Forecah, pętla w pętli

Języki, których efekty są wykonywane po stronie serwera. PHP, ASP czy CGI w połączeniu z bazami danych SQL dają niezwykłe możliwości budowy i zarządzania stron WWW. Tu zadajemy pytania oraz demonstrujemy kod, z którym mamy problem.
Stef@n
Nowy
Nowy
Posty: 40
Rejestracja: sob lut 15, 2003 12:33 pm
Lokalizacja: Nowy Targ
Kontakt:

[PHP][MYSQL][SMARTY]Forecah, pętla w pętli

Post autor: Stef@n »

Witam,
Coś mi nie wychodzi z tym Smarty :D. Kolejny dzień i kolejny problem. Wyświetlam z bazy MySql tabele kategorii gdzie jedna kategoria ma kilka podkategorii. Wszystko połączone "id". Problem polega na tym że pobieram dane z tabeli Kategorie i Podkategorie. Przesyłam dane do Smarty. W smarty Tworze pętle "foreach" by wyświetlał Kategorie a w tej pętli drugą pętle "foreach" z warunkiem "if" gdzie kategorie.id_kategorii == podkategorie.id_kategorii i wszystko było by git ale druga pętla przetwarza dane tylko raz. Więc wynik prawidłowy będzie tylko do kategorii która jest pierwsza wyświetlana.

Bardzo proszę o pomoc jak rozwiązać ten problem by druga pętla ładowała za każdym razem ponownie dane z podkategorii.

Tabela MySql wygląda tak:

[sql]
--
-- Struktura tabeli dla `kategorie`
--

CREATE TABLE `kategorie` (
`id_kategorii` int(11) NOT NULL auto_increment,
`nazwa_kategorii` varchar(40) NOT NULL default '',
PRIMARY KEY (`id_kategorii`)
) TYPE=MyISAM AUTO_INCREMENT=5 ;

--
-- Zrzut danych tabeli `kategorie`
--

INSERT INTO `kategorie` VALUES (1, 'Wiadomości');
INSERT INTO `kategorie` VALUES (2, 'Rozrywka');
INSERT INTO `kategorie` VALUES (3, 'Technologia');
INSERT INTO `kategorie` VALUES (4, 'Różne');

-- --------------------------------------------------------

--
-- Struktura tabeli dla `podkategorie`
--

CREATE TABLE `podkategorie` (
`id_podkategorii` int(11) NOT NULL auto_increment,
`id_kategorii` int(11) NOT NULL default '0',
`nazwa_podkategorii` varchar(40) NOT NULL default '',
PRIMARY KEY (`id_podkategorii`,`id_kategorii`)
) TYPE=MyISAM AUTO_INCREMENT=13 ;

--
-- Zrzut danych tabeli `podkategorie`
--

INSERT INTO `podkategorie` VALUES (1, 1, 'Polityk');
INSERT INTO `podkategorie` VALUES (2, 1, 'Sport');
INSERT INTO `podkategorie` VALUES (3, 1, 'Pogoda');
INSERT INTO `podkategorie` VALUES (4, 1, 'Kultura');
INSERT INTO `podkategorie` VALUES (5, 2, 'Muzyka');
INSERT INTO `podkategorie` VALUES (6, 2, 'Filmy');
INSERT INTO `podkategorie` VALUES (7, 2, 'Książki');
INSERT INTO `podkategorie` VALUES (8, 2, 'Imprezy');
INSERT INTO `podkategorie` VALUES (9, 2, 'Motoryzacja');
INSERT INTO `podkategorie` VALUES (10, 3, 'PC');
INSERT INTO `podkategorie` VALUES (11, 3, 'GSM');
INSERT INTO `podkategorie` VALUES (12, 4, 'Ciekawostki');
[/sql]

kod PHP
[php]
<?php
//Łaczy z baza
$wyniki_k = mysql_query ("SELECT * FROM kategorie");

//Pobieranie danych
while ($rekord_k = mysql_fetch_array ($wyniki_k)) {
$dane_k['id_kategorii'] = $rekord_k['id_kategorii']; // id kategorii
$dane_k['nazwa_kategorii'] = $rekord_k['nazwa_kategorii']; //Nazwa Kategorii
$dane_tablica_k[] = $dane_k;
}

//Łaczenie z baza
$wyniki_pk = mysql_query ("SELECT * FROM podkategorie");

//Pobieranie danych z bazy
while ($rekord_pk = mysql_fetch_array ($wyniki_pk)) {
$dane_pk['id_podkategorii'] = $rekord_pk['id_podkategorii']; // id podkategorii
$dane_pk['id_kategorii'] = $rekord_pk['id_kategorii']; // id kategorii
$dane_pk['nazwa_podkategorii'] = $rekord_pk['nazwa_podkategorii']; //Nazwa podategorii
$dane_tablica_pk[] = $dane_pk;
}

//Przekazywanie zmiennych do Smarty
$smarty -> assign('dane_k', $dane_tablica_k); //Dane Kategorie
$smarty -> assign('dane_pk', $dane_tablica_pk); //Dane Podkategorie
?>
[/php]

kod TPL

Kod: Zaznacz cały

		{foreach item=dane_k from=$dane_k}
			<div><b>{$dane_k.nazwa_kategorii}</b>:</div>
				{foreach item=dane_pk from=$dane_pk}
				{if $dane_pk.id_kategorii == $dane_k.id_kategorii}
					<div> - {$dane_pk.nazwa_podkategorii}</div>
				{/if}
				{/foreach}
		{/foreach}

Dziękuje z góy za każdą pomoc.
ODPOWIEDZ