Всего всех счетчиков foreach count в массиве php - PullRequest
0 голосов
/ 02 апреля 2012

Код выбирает отдел, который затем перечисляет курсы в этом отделе, а затем я хочу, чтобы также отображался общий объем ресурсов для связанных курсов (родительских и дочерних курсов).

Я пытаюсь получитьОбщая сумма из числа foreach в массиве php.Кто-нибудь может мне помочь с этим, пожалуйста?

Вот мой код:

$categoryid = $_POST['dept'];

//get course codes from department
$get_dept_codes = mysql_query("SELECT id, name FROM course_categories WHERE parent = 0 order by name asc");


    echo "<form method='POST' action='gsb_by_department.php'><p>";
    echo "<select size='1' name='dept'>";
    //loop through and list department names in drop down box
    while($row = mysql_fetch_array($get_dept_codes))
        {
        $catid = $row['id'];
        $catname = $row['name'];
        echo "<option name='category' value=$catid>$catname</option>";

        //echo $catid;
        //echo $catname;
        echo "<br />";
        }



echo "</select><input type='submit' value='Submit' name='submit'></p></form>";


//get course codes from department

$get_dept_codes = mysql_query("SELECT course.id, course.shortname, course.fullname, gsb_content.gsb
FROM _course INNER JOIN gsb_content ON course.id = gsb_content.courseid
WHERE (((course.category)=$categoryid)) AND course.metacourse = 0
ORDER BY course.id;");

//loop through and process for courses 

while($row = mysql_fetch_array($get_dept_codes))
    {

$childcourse = $row['id'];

//Get the $parentcourses

    $parentcourses= mysql_query("SELECT parent_course FROM course_meta where child_course = $childcourse"); 

//for each of the $parentcourses count FROM resource where course=$theparentcourse

    foreach($parentcourses as $parentcourse)) {
    $thenewid = $parentcourse['parent_course'];
    $thecount = mysql_query("SELECT count(*) FROM resource where course=$thenewid");
    }

//I want to be able to add up all the counts from the above and store in variable 

    $allcountstandardslinknum = array_sum($countstandardslinknum);
}

У кого-нибудь есть какие-нибудь идеи / рекомендации.Буду очень признателен.

Ответы [ 3 ]

2 голосов
/ 02 апреля 2012

Я думаю, это то, что вам нужно:

$sql = "SELECT
    course_meta.parent_course,
    COUNT(DISTINCT resource.id) AS count
FROM
    course_meta
INNER JOIN resource ON course_meta.parent_course = resource.course
WHERE
    course_meta.child_course = $childcourse
GROUP BY course_meta.parent_course";

$query = mysql_query($sql);

while ($result = mysql_fetch_assoc($query))
{
  echo 'Course "' . $result['parent_course'] . '" has " . $result['count'] . " resources.<br />';
}

Слово предупреждения, если $childcourse - строка, вам нужно заключить ее в одинарные кавычки.

Кроме того, вы уверены, что название здесь верно? Конечно, у детского курса есть только один родительский курс (и у родительского курса может быть много детских курсов?).

1 голос
/ 02 апреля 2012

Я не уверен, что вышеприведенное подразумевалось как псевдокод, но метод mysql_query возвращает объект результата, поэтому вам нужно сделать что-то вроде mysql_fetch_array.

Что касается получения суммы, которую вы можете просто суммировать в цикле следующим образом:

$total = 0;
foreach($parentcourse as $parentcourses)) {
    $thenewid = $parentcourse['parent_course'];
    $thecountrow = mysql_fetch_array(mysql_query("SELECT count(*) FROM resource where course=$thenewid"));
    $thecount = $thecountrow[0];
    $total += $thecount;
}
echo "Total is $total";

Вы также можете добавить проверку работоспособности и тому подобное.

Edit: Также только что заметил, что ваш цикл foreach содержит переменные неправильно, это должно быть:

foreach($parentcourses as $parentcourse){

Я всегда помню это как предложение: «для каждого из элементов в $ parentcourses name $ parentcourse»

Edit2: Ваша переменная $ parentcourses на самом деле не является массивом, который вам нужен для захвата каждой строки аналогично внешнему циклу while, например:

$parentcoursesres= mysql_query("SELECT parent_course FROM course_meta where child_course = $childcourse"); 
$total = 0;
while($parentrow = mysql_fetch_assoc($parentcoursesres)){
    $thenewid = $parentrow['parent_course'];
    $thecountrow = mysql_fetch_array(mysql_query("SELECT count(*) FROM resource where course=$thenewid"));
    $thecount = $thecountrow[0];
    $total += $thecount;
}
echo "Total is $total";
0 голосов
/ 02 апреля 2012

Попробуйте это:

$result= mysql_query("SELECT parent_course FROM course_meta where child_course = $childcourse"); 

$parentcourses = mysql_fetch_array($result);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...