2013-02-27 3 views
2

Я пытаюсь написать сценарий, который принимает результаты SQL-запроса, и по мере прохождения каждого результата он проверяет, что имя $ row [13 ] должно быть, а затем я хочу, чтобы он просматривал каждый результат запроса, он идентифицирует имена, которые похожи, и подсчитывает, сколько раз он видит это имя. Я думал, что у меня есть цикл, который подсчитал бы, сколько раз одно и то же имя появляется в массиве, а затем отображает его. Конечный результат я ищу,php - нужен цикл foreach для отображения только одного набора значений

Operations - 87 
Training - 32 
HR - 12 

Но после того, как я запускаю этот код:

 while($row = mysql_fetch_array($result_id)) 
    { 
     $profile8 = mysql_query 
        (" 
         SELECT org 
         FROM cost_centers 
         WHERE cost_center = '$row[13]' 
        ") 
        or die(mysql_error()); 
        $anymatches=mysql_num_rows($profile8); 
         while($pro8 = mysql_fetch_array($profile8)) 
         { 
          $orgnames = $pro8[0]; 
         } 


          $names[] = $orgnames; 

          $newArray = array_count_values($names); 

          foreach ($newArray as $key => $value) { 
           echo "$key - $value <br />"; 
          } 

    } 

я в конечном итоге с ним continuiously считая, как это:

HR - 1 
HR - 1 
Communications - 1 
HR - 1 
Communications - 1 
- 1 
HR - 1 
Communications - 1 
- 2 
HR - 1 
Communications - 1 
- 3 
HR - 1 
Communications - 1 
- 4 
HR - 2 
Communications - 1 
- 4 
HR - 3 
Communications - 1 
- 4 
HR - 3 
Communications - 1 
- 4 
Operations - 1 
HR - 4 
Communications - 1 
- 4 
Operations - 1 
HR - 4 
Communications - 1 
- 5 
Operations - 1 
HR - 4 
Communications - 1 
- 6 
Operations - 1 
HR - 4 
Communications - 1 
- 6 
Operations - 2 
HR - 4 
Communications - 1 
- 6 
Operations - 3 
HR - 4 

Так он выглядит почти как и его группировка, затем подсчет, а затем перегруппировка, поскольку он продолжает добавлять свой счет. Надеюсь, это будет иметь смысл и спасибо заранее.

+2

Не могли бы вы легко это сделать в SQL? Отправьте свою таблицу-info, pls – michi

+0

Это может быть да, но я пытаюсь этот метод переработать ранее названный SQL, который не может иметь результаты, сгруппированные по чем угодно. – user1221768

+0

не может? предоставить подробную информацию, pls – michi

ответ

1

Это happans потому, что вы печатаете счетчики каждый раз внутри цикла. То, как оно должно быть:

<?php 

while($row = mysql_fetch_array($result_id)) 
{ 
    $profile8 = mysql_query(" 
     SELECT org 
     FROM cost_centers 
     WHERE cost_center = '$row[13]'") 
    or die(mysql_error()); 

    $anymatches=mysql_num_rows($profile8); 
    while($pro8 = mysql_fetch_array($profile8)) 
    { 
     $orgnames = $pro8[0]; 
     $names[] = $orgnames; 
    } 
} 

$newArray = array_count_values($names); 

foreach ($newArray as $key => $value) { 
    echo "$key - $value <br />"; 
} 

Во всяком случае, это не очень хороший выбор, чтобы сделать новый запрос для каждой строки в первой строке. Вы должны лучше изучить SQL, особенно о JOIN и (в вашем случае) операторе COUNT.

+0

Вот и все! Кто знал, что я сделал это не в том месте. Спасибо, и это имеет смысл. – user1221768

1

Почему бы вам не использовать следующий запрос:

SELECT 
    SUM(IF(org='HR', 1, 0)) AS HRCount, 
    SUM(IF(org='Communications', 1, 0)) AS ComCount, 
    SUM(IF(org='Operations', 1, 0)) AS OpCount, 
FROM cost_centers 
WHERE cost_center = '$row[13]' 

Тогда вы можете просто Acces значения по телефону $row["HRCount"];

0

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

SELECT cost_centers.org, count(*) FROM cost_centers WHERE cost_center = what_you_want GROUP BY cost_centers.org 
0

Вы находитесь на правильном пути.

Перед время сделать массив:

$org = array(); 

Теперь в Еогеасп, сделать ключ в новый массив, используя $ ключ, а затем добавить один

foreach ($newArray as $key => $value) { 
    $org[$key] += 1; 
} 

И когда вы» заново выполнить цикл while ($ row = mysql_fetch_array ($ result_id)), сделать еще один цикл foreach и показать результаты.

Смежные вопросы