Брой на ученици

djman

Registered
Здравейте!

Може ли малко помощ относно следната заявка:

имам
Код:
таблица classes
class_id (int)
...

Код:
таблица students
student_id (int)
...
klas (int)

class_id = klas

Как да преброя колко записа има свързани с всяко class_id (или иначе казано, колко ученика има в един клас)? Пробвам така:

[sql]SELECT COUNT(*) AS std FROM students AS s, classes AS c WHERE s.klas = c.class_id[/sql]

но резултата е само и единствено "4" - общия брой на записите в таблица students... :idea:
 
Код:
mysql_query("SELECT  COUNT(`klas`) as count FROM `students` GROUP BY `klas`") or die (mysql_error());


или това:

mysql_query("SELECТ count(t2.`klas`) as count_klas FROM `classes` as t1 LEFT JOIN `students` as t2 ON t1.`class_id`=t2.`klas` GROUP BY t2.`klas`") or die(mysql_error());
 
Мисля че направих това което ти трябва но не с 1 заявка.

PHP:
$a = mysql_query("SELECT * FROM classes ORDER by class_id") or die(mysql_error());
while ($b = mysql_fetch_array($a))
{
$class_id = $b['class_id'];
$c = mysql_query("SELECT * FROM students WHERE klas='$class_id'") or die(mysql_error());
$studenti = mysql_num_rows($c);
echo "V $class_id klas ima $studenti studenti.<br><br>";
}

Така би трябвало да ти искара за всеки клас колко студенти има.
Пробвай го и кажи резултатът ;)
 
@proba, и твоя вариант пробвах преди и не ставаше..

на @embaka проработи, благодарен много! А дали е възможно да се "внедри" в тази заявка

[sql]SELECT class_id, class, paralelka, m.first_name, m.last_name
FROM classes AS c, members AS m
WHERE c.klasen = m.member_id
ORDER BY class ASC, paralelka ASC[/sql]
 
може и така
PHP:
<?php $sql = mysql_query("select * from u4enici,clasowe  where u4enici.u4enik_id='clasowe.class_id' ");
$broi = mysql_num_rows($sql);

промени го малко и би трябвало да стане.. :)
 
djman каза:
@proba, и твоя вариант пробвах преди и не ставаше..

на @embaka проработи, благодарен много! А дали е възможно да се "внедри" в тази заявка

[sql]SELECT class_id, class, paralelka, m.first_name, m.last_name
FROM classes AS c, members AS m
WHERE c.klasen = m.member_id
ORDER BY class ASC, paralelka ASC[/sql]


Обясни кое какво е, тая заявка няма да работи на 100% както е написа заради class
 
Да, усетих се (въпреки че работи о.о) и го сложих в `` ...

Целта ми е следната .. да обединя три таблици със следните свързани полета

classes:
-class_id
-klasen

members:
-member_id
-first_name

students:
-klas

class_id = klas
klasen = member_id
first_name - за информация (и останалите)

и ги изкарвам в една html таблица - клас, паралелка, класен ръководител и брой ученици.

:idea:
 
ами да ми кажеш поне това поле class и paraleka, в кои таблица са, че така съм написал на полвина заявката, защото не знам кое как да свържа


Код:
mysql_query("SELECТ 
	count(t2.`klas`) as count_klas, t1.`class_id`, t3.`first_name`, t3.`last_name`, t1.`paralelka`, t1.`class`
	FROM `classes` as t1 
	LEFT JOIN `students` as t2 ON t1.`class_id`=t2.`klas` 
	RIGHT JOIN `members` as t3 ON t1.`klasen`=t3.`member_id`
	GROUP BY t2.`klas`") or die(mysql_error());


нещо ей такова трябва да е с 1 заявка, ама надали ще тръгне от първия път, защото не знам кое къде се намира
 
embaka каза:
ами да ми кажеш поне това поле class и paraleka, в кои таблица са, че така съм написал на полвина заявката, защото не знам кое как да свържа

Извинявам се, едно пълен списък:

classes:
-class_id
-class
-paralelka
-klasen

members:
-member_id
-first_name
-last_name

students:
-student_id
-klas

class_id = klas
klasen = member_id
 
така както съм го написал горе трябва да работи, изпълни заявката в mysql и ще видиш какво ти връща
 
Работи, само че нулевия ред не е верен - всичко е 0 и NULL освен first и last_name :roll:
 
Ами явно тоя Админ Админов не е вкаран никъде, нито в паралелка, нито в клас, никъде, то няма логика, всичко да излиза, а само на него да са празни полетата. Щом връща NULL, значи няма резултати да същесвува тоя потребител в тея полета

щом ти връща в count_klas 0, очввадно е че няма за тоя клас студенти и връща нула за всичко
 
Да, схванах какво имаш предвид и оправих.

Благодаря наистина много!!! :lol:
 

Back
Горе