2013-09-10 4 views
0

Я столкнулся с проблемой работы с многомерным массивом. Ниже приведен код для хранения всего запроса данных от mysql до массива. Могу ли я узнать, есть ли какая-либо идея, как рассчитать, сколько разных имен модулей в многомерном массиве и разбить статус на 2 столбца, которые опоздали и присутствуют? SQL-запрос получает данные из сложной таблицы, в которой хранятся все имя модуля и другой статус. Мне нужно разделить их и показать в таблице. Поэтому в основном мне нужно проверить, сколько модулей в массиве и сколько запоздало или присутствует для модуля.Расчет данных массива

while($array = mysql_fetch_array($result)){ 
     $list[] = array(
         "ModuleName"=>$array['ModuleName'], 
         "status" =>$array['Status'] 
      ); 
    } 

Sample of the SQL query

Это образец ожидаемого результата

Sample Expected Result

+0

'$ рассчитывает [$ массив [ 'Статус']] ++'? –

+0

Итак, вы хотите, чтобы на выходе была одна строка с тремя столбцами (количество модулей, последнее, настоящее)? Можете ли вы поделиться SQL для извлечения данных и базовой структуры данных? Я предполагаю, что это, вероятно, может быть легко выполнено в вашем SQL-запросе. – gwc

+0

@MarcB Это не работает, поскольку мне нужно в соответствии с именем модуля, чтобы узнать, сколько времени и сколько присутствующих. –

ответ

1

Обновлено в группе MODULENAME

SELECT ModuleName 
     ,COUNT(*) AS module_count 
     ,SUM(CASE WHEN Status != 'Present' THEN 1 ELSE 0 END) as late_count 
     ,SUM(CASE WHEN Status = 'Present' THEN 1 ELSE 0 END) as present_count 
    FROM (your original query) 
GROUP BY ModuleName 

Просто замените «оригинал Qu ery "с SQL, который использовался для извлечения данных в массиве.

Оригинальные

SELECT COUNT(*) AS module_count 
     ,SUM(CASE WHEN Status != 'present' THEN 1 ELSE 0 END) as late_count 
     ,SUM(CASE WHEN Status = 'present' THEN 1 ELSE 0 END) as present_count 
    FROM (your original query) 
+0

отлично подходит для этого. Во всяком случае, я использовал этот sql-запрос, чтобы вытащить данные. Потому что этот дизайн базы данных довольно беспорядок. SO, наконец, я присоединился к некоторым таблицам, чтобы получить всю информацию. SELECT *, a.AttendanceID как идентификатор из классов как С, в качестве посещаемости, incharges КАК я ГДЕ a.StudentID = "TP000001" И a.ClassID = c.ClassID И c.InchargeID = i.InchargeID LIMIT 0, 30 –

+0

Обновлено для группировки по имени модуля (на основе обновленного вопроса). – gwc

+0

Большое спасибо. Это очень помогает. Есть ли способ фильтровать модуль и фильтровать статус в одно и то же время? = D Если я не получил неправильную информацию, в настоящее время sql фильтрует статус из того же модуля, правильно ли я? –

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