Skocz do zawartości

2 Tabele + Pętla


Sanchez Spinoza

Rekomendowane odpowiedzi

Kurcze zawsze miałem problem z pętlami.

Mam dwie tabele:

1 Tabela zawiera ID BLOKU i jego NAZWĘ

2 Tabala zawiera NAZWĘ KATEGORI i ID BLOKU do którego została dopisana.

Chodzi mi oto że mam np. 2 bloki (2 rekordy o różnych nazwach np. Menu 1, Menu 2) w bazie i do tych bloków

należą po kilka kategorii. Chodzi oto żeby wyświetlić daną kategorię przy danym bloku.

Wszystko do tej pory mi się udawało. Tylko powiesiłem się na tym że mój skrypt który popełniłem

wyświetla mi pokolei:

NAZWĘ BLOKU 1

- Kategoria xxx należna do bloku 1

NAZWĘ BLOKU 2

- Kategoria xxx należna do bloku 2

NAZWĘ BLOKU 1

- Kategoria xxx należna do bloku 1

NAZWĘ BLOKU 2

- Kategoria xxx należna do bloku 2

I tak do póki nie skończą się kategorię.

Jak wiadomo popełniłem błąd w rozpisaniu pętli.

Oto on:

$result = @mysql_query("SELECT * FROM bloki INNER JOIN kategorie ON bloki.id = kategorie.idblok"); 
while ($rekord = @mysql_fetch_array($result)) 
{ 
echo '<P class="nad_kat">' . $rekord['nazwa_bloku'] . '</P>'; 
echo '<UL id="menu">'; 
echo '<LI><A href="index.php?nav=1&idkat=' . $rekord['id'] . '">' . $rekord['nazwa'] . '</A></LI>'; 
echo '</UL>'; 

}

$rekord['id'] to ID kategorii

$rekord['nazwa'] to nazwa kategorii

Kurcze podejżewam że zrobiem jakiś drobny błąd bo trzeba dodać pętle która mi wyświetli wszytkie kategorie z bloku

i potem przejdzie do nowego bloku. A ja tego nie potrafie !!!

Czy ktoś widzi może oco mi chodzi czy przesadziłem z tym przykładem?

Profesjonalne publikacje Content Marketingowe - zamów online na BlackHood.pl 

Szeroki wybór Łożysk samochodowych

Polecam również Praca Bielsko

Odnośnik do komentarza
Udostępnij na innych stronach

1) Najpierw ciagniesz dane dotyczące bloków, a potem linków i to łączysz

2) W zapytaniu dodajesz sortowanie po id bloku, w skrypcie sprawdzasz czy nazwa bloku sie zmieniła od ostatniego przejechania. Jeśli tak to wyswietlasz

stopka usunieta z wpoodu wirusa na stronie docelowej

Odnośnik do komentarza
Udostępnij na innych stronach

Siakies ciżężkie Wariacie_zbuszy te Twoje kodowanie !!!

HTTP 200 usługi IT -> Dariusz Janicki | Realizacja serwisów www oraz oprogramowania w PHP / C# / Golang / Node.js / MySQL/ Laravel
Komory normobaryczne - normobaria.tech Wykonawca montażu i instalacji komory normobarii

Odnośnik do komentarza
Udostępnij na innych stronach

Mam te dane pobierać w jednej pętli WHILE czy w dwóch? Jedna dla bloków a druga dla kategorii?

Profesjonalne publikacje Content Marketingowe - zamów online na BlackHood.pl 

Szeroki wybór Łożysk samochodowych

Polecam również Praca Bielsko

Odnośnik do komentarza
Udostępnij na innych stronach

No dzięki. Przeglądnąłem soie ten plik. W sumie to tak podejżewałem że trzeba będzie zliczyć ilość rekordów zawierających idbloku i tyle razy powtórzyć pętle. Jak sie to tam robiło? :D

$ile=@mysql_fetch_array(mysql_query("SELECT COUNT(*) FROM xxx WHERE rekord = xxx"));

czy

$numrows = mysql_num_rows(mysql_query("SELECT * FROM xxx WHERE rekord = xxx"));

Profesjonalne publikacje Content Marketingowe - zamów online na BlackHood.pl 

Szeroki wybór Łożysk samochodowych

Polecam również Praca Bielsko

Odnośnik do komentarza
Udostępnij na innych stronach

Ok, troche pokombinowąłem i zrobiłęm takie coś:

$result = @mysql_query("SELECT * FROM bloki");
 while ($rekord = @mysql_fetch_array($result))
  {

	$result = @mysql_query("SELECT * FROM bloki");
 echo '<P class="nad_kat">' . $rekord['nazwa_bloku'] . '</P>';


	 $blok = $rekord['id'];


	$result = @mysql_query("SELECT * FROM kategorie WHERE idblok = $blok ");
while ($rekord = @mysql_fetch_array($result))
{
 echo '<UL id="menu">';
 echo '<LI><A href="index.php?nav=1&idkat=' . $rekord['id'] . '">' . $rekord['nazwa'] . '</A></LI>';
 echo '</UL>';


}
  }

Ale to ciągle nie jest to bo ten skrypt wyświetla mi tylko jeden raz:

JEDNĄ nazwę bloku i wszystkie kategorie do niego należne.

Czyli:

NAZWA BLOKU 1

- jakaś kategoria bloku 1

- jakaś kategoria bloku 1

Jak powtórzyć całą tą pętle tylko żeby wskaźnik w bazie przeskoczył mi do następnego rekordu?

Profesjonalne publikacje Content Marketingowe - zamów online na BlackHood.pl 

Szeroki wybór Łożysk samochodowych

Polecam również Praca Bielsko

Odnośnik do komentarza
Udostępnij na innych stronach

kurcze ale sajgon...

$result = @mysql_query("SELECT * FROM bloki");
while ($rekord = @mysql_fetch_array($result))
{
	echo '<P class="nad_kat">' . $rekord['nazwa_bloku'] . '</P>';
	$blok = $rekord['id'];

	$result1 = @mysql_query("SELECT * FROM kategorie WHERE idblok = $blok ");
	while ($rekord = @mysql_fetch_array($result1))
		{
			echo '<UL id="menu">';
			echo '<LI><A href="index.php?nav=1&idkat=' . $rekord['id'] . '">' . $rekord['nazwa'] . '</A></LI>';
			echo '</UL>';
		}
}

sposób pisania ... tragedia ... ale będzie działać

brak sygnatury

Odnośnik do komentarza
Udostępnij na innych stronach

Ok, troche pokombinowąłem i zrobiłęm takie coś:
I znowu Dałeś w pętli, pętlę ... Co ty Robisz - opamiętaj się :)tak sie nie robi

HTTP 200 usługi IT -> Dariusz Janicki | Realizacja serwisów www oraz oprogramowania w PHP / C# / Golang / Node.js / MySQL/ Laravel
Komory normobaryczne - normobaria.tech Wykonawca montażu i instalacji komory normobarii

Odnośnik do komentarza
Udostępnij na innych stronach

Działa! dzieki za rowiązanie truvati ! :)

Ide teraz i linijka po linijce musze to przestudiowac.

Dzięki raz jeszcze!

Profesjonalne publikacje Content Marketingowe - zamów online na BlackHood.pl 

Szeroki wybór Łożysk samochodowych

Polecam również Praca Bielsko

Odnośnik do komentarza
Udostępnij na innych stronach

pętal w pętli to pewny sposób do samozagłady :).
I to jeszcze z w dodatku z zapytaniami do bazy danych...

HTTP 200 usługi IT -> Dariusz Janicki | Realizacja serwisów www oraz oprogramowania w PHP / C# / Golang / Node.js / MySQL/ Laravel
Komory normobaryczne - normobaria.tech Wykonawca montażu i instalacji komory normobarii

Odnośnik do komentarza
Udostępnij na innych stronach

To może mieć duże znaczenie jak projekt jest obszerny tak mi sięwydaje ale jak strona nie pobiera aż tak dużo danch to źle napisany kod może nie wpłynąć aż tak negatywnie na prace strony.

Wiem że lepiej nie robić nic jak się ma coś zrobić byle jak ale w tym wypadku nie znalazłem alternatywy a muszę to zrobić (na własne potrzeby, nikomu tego nie sprzedaje).

P.s jak nie pętla w pętli to jak się to robi (tak na przyszłość)? Tak jak pisał MMP, ale jak połączyć wyniki z jednej pętli z drugą jednocześnie?

To już wyższa szkoła jazdy. Przynajmniej dla mnie. Co nie znaczy że tego się nie będę uczył. Poprostu teraz nie mam kiedy.

Pozdro.

Profesjonalne publikacje Content Marketingowe - zamów online na BlackHood.pl 

Szeroki wybór Łożysk samochodowych

Polecam również Praca Bielsko

Odnośnik do komentarza
Udostępnij na innych stronach

żeby nie było że się tylko "mądrzę" spróbuję problem rozwiązać "na sucho".

(więc mogę być jakieś błedy - literówki ale mi chodzi o ideę)

po pierwsze jedno pytanie SQL:

SELECT * FROM kategorie RIGHT JOIN bloki ON bloki.id = kategorie.idblok ORDER BY nazwa_bloku,nazwa

(to pierwsze nie jestem pewnien tylko raodzaju joina) i nie zapominajcie o sorotowaniu bo potem dostajecie sieczkę

echo("<ul>\n");
$block='';
while ($rekord = @mysql_fetch_array($result))  { 
 if ($block!=$rekord['nazwa_bloku']) {
$block=$rekord['nazwa_bloku']);
echo ("<li>".$rekord['nazwa_bloku'])."</li>\n <ul>\n");
 }
 echo '  <li><a href="index.php?nav=1&idkat=' . $rekord['id'] . '">' . $rekord['nazwa'] . '</a></li>'."\n"; 
}
echo("  </ul>\n</ul>\n");

Odnośnik do komentarza
Udostępnij na innych stronach

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...

Powiadomienie o plikach cookie

Umieściliśmy na Twoim urządzeniu pliki cookie, aby pomóc Ci usprawnić przeglądanie strony. Możesz dostosować ustawienia plików cookie, w przeciwnym wypadku zakładamy, że wyrażasz na to zgodę. Warunki użytkowania Polityka prywatności