Proste zliczenie rekordów

0

Witam :)
Jestem zielony, od wczoraj próbuję stworzyć coś w MySQL wiec będę bardzo wdzięczny za wyrozumiałość.

Mam bazę (w pełni działającą) gdzie są dwie tabele: Patrol i Osoba. Tabela patrol ma kolumnę (id_patrol). Tabela Osoba ma kolumnę "id_patrolu". Jest to prosty spis zespołów oraz osób w tych zespołach.

Moim celem jest wyświetlić Nazwy zespołów oraz policzyć ile te zespoły mają osób. W tym celu napisałem poniższy kod:

mysql_connect($db[host], $db[user], $db[pass]) or die("<center>Brak połączenia z bazą danych</center>");
mysql_select_db($db[name]) or die("<center>Brak połączenia z bazą danych</center>");
mysql_query('SET NAMES UTF8');
$i = 1;
$j = 1;
$query  = "SELECT * FROM Patrol WHERE trasa=\"Młodsza\"";
$result = mysql_query($query)
    or die("Query failed");

echo "<p class=\"tytul\"><strong>Trasa młodsza</strong></p>";
echo "<table style=\"margin: 0 auto;\"><tr><td style=\"border: 1px solid black\"><strong>Lp.</strong></td><td style=\"border: 1px solid black\"><strong>Nazwa patrolu</strong></td><td style=\"border: 1px solid black\"><strong>Jednostka macierzysta</strong></td><td style=\"border: 1px solid black\"><strong>Uczestników:</strong></td></tr>";
while ($row = mysql_fetch_array($result)) {
		$id = $row["id_patrol"];
		$wynik = mysql_query ('SELECT * FROM Osoba WHERE id_patrolu=$id');
		$wynik2 = mysql_num_rows($wynik);
	    echo "<tr><td style=\"border: 1px solid black\">" . $i .
		 "</td><td style=\"border: 1px solid black\">" . $row["Nazwa"] .
         "</td><td style=\"border: 1px solid black\">" . $row["J_macierzysta"] .
		 "</td><td style=\"border: 1px solid black\">" . $wynik2.
         "</td></tr>\n";
		 $i++;
}
echo "</table>";
mysql_free_result($result); 

Niestety liczba uczestników się nie wyświetla. Doszedłem do tego, że gdy w miejscu gdzie powinna być wypisana liczba uczestników wypiszę id patrolu, to wyświetlony jest on poprawnie. Gdy na sztywno wpiszę, że numer patrolu to np. 13:

$wynik = mysql_query ('SELECT * FROM Osoba WHERE id_patrolu=13');

to ilość uczestników dla patrolu numer 13 będzie prawidłowa. Wniosek mam prosty - źle zagnieżdżam zmienną w zapytaniu. Niestety od dwóch godzin próbuję różne opcje (uczę się dopiero) i szukam odpowiednich przykładów lecz niestety bezskutecznie.

Będę wdzięczny za pomoc! Dziękuję

0

Zamiast:

        $wynik = mysql_query ('SELECT * FROM Osoba WHERE id_patrolu=$id');

daj:

        $wynik = mysql_query ("SELECT * FROM Osoba WHERE id_patrolu=".$id."");

Możesz też:

        $wynik = mysql_query ('SELECT * FROM Osoba WHERE id_patrolu='.$id);

Twój kod jest przerażający, ale pewnie to Ci pomoże.

PS. Problemem jest to, że w ' ' PHP nie doszukuje się zmiennych. Na przyszłość możesz sobie zapytanie wrzucić do zmiennej i wyrzucić ją na ekran - będziesz wiedział co leci do bazy. ;)

0

Bardzo dziękuję za odpowiedź! Działa :)

Czy poza brakiem styli (które na ten moment pominąłem) coś jeszcze jest koszmarnego? Uwagi będą cenne i na pewno przydatne :)

0

http://php.net/mysql_connect - "This extension is deprecated".

Mianowicie brak:

  • Obsługi wyjątków
  • Zapytania bazowe i widok w jednym (brak jakiegokolwiek wzorca)
  • Użycie tabel + w nich style ^^
  • $db[host], $db[user], $db[pass] - zmienne globalne?
  • Relacji między tabelami
1

#Brak systemu szablonów,
#używanie mysql_*,
#używanie $tablica[foo], zamiast $tablica['foo'],
#wyciszanie ostrzeżeń php by się nie pokazywały, zamiast ich eliminowanie (bo o tym wcześniejszym byś się dowiedział, ale wyciszyłeś ostrzeżenia),
#style inline (czyli stylowanie używając atrybutu style)
#archaizmy typu <center> (10 lat temu wyśmiewano za używanie tego, a już 2015 jest..)
#brak zabezpieczeń przed sql injection (ale to efekt punktu 2)
#raz $restult, raz $wynik (nazewnictwo zmiennych)
#niepotrzebne pobieranie num_rows w pętli ;]
#używanie podwójnego cudzysłowy w zapytaniu sql: trasa="Młodsza", co jest specyficzne/dozwolone dla MySQL chyba tylko, kiedy trasa='Młodsza' byłoby dostępne w każdym silniku bazodanowym

Chyba nic więcej w tym kawałku kodu się nie znalazło ;)

1 użytkowników online, w tym zalogowanych: 0, gości: 1