выберите поля и сгруппируйте их в категории в php и mysql

#php #mysql

#php #mysql

Вопрос:

у меня есть таблица с staff_id и subjects, я хочу отобразить все сотрудники в соответствии с их тематикой.

моя таблица
введите описание изображения здесь

результат, который я хочу

 Physics
  -001
  -004
  -006
Chemistry
  -002
  -009
Biology
  -003
  -008
Mathematics
  -005
  

Мой код

  $q = mysql_query("Select staff_id from my_table");
   while($row = mysql_fetch_array($q)){
      echo $subject .'</br>';

      echo $staff_id.'</br>';

    }
  

но это не дает желаемого результата.
любая помощь?

Комментарии:

1. Пожалуйста, больше не используйте mysql_* функции, потому что они устарели. PDO mysqli_* Вместо этого используйте или.

2. GROUP BY поможет вам немного

3. хорошо, я перейду к mysqli_ *, спасибо за совет @TiMESPLiNTER

Ответ №1:

Что вам нужно, так это ORDER BY .

Измените ваш запрос на:

 SELECT STAFF_ID, SUBJECT FROM my_table ORDER BY SUBJECT, STAFF_ID
  

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

Ответ №2:

Что-то вроде этого?

 $q = mysql_query("SELECT `staff_id`, `subject` FROM `my_table`;");
$data = array();
while($row = mysql_fetch_array($q)){
    $data[$row['subject']][] = '-'.$row['staff_id'];
}
print_r($data);
  

Или для эхо-вывода строк

 foreach($data as $heading => $rows){
    echo $heading.'<br>';
    foreach($rows as $row){
        echo $row.'<br>';
    }
}
  

Комментарии:

1. кажется, это работает, но есть одно поле, которое я хочу добавить в этот массив, как я могу это сделать.?

Ответ №3:

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

 $q = mysql_query("SELECT * FROM my_table ORDER BY SUBJECT, STAFF_ID");
while($row = mysql_fetch_array($q)){
 //Do staff
}
  

Ответ №4:

Следующий код должен помочь. Вы должны разделить каждую тему на отдельный массив в вашем запросе. Как только ваш запрос будет завершен, вы должны выполнить итерацию по массиву subject, а затем по каждому идентификатору персонала.

 $subjects = array();
$q = mysql_query("Select staff_id from my_table");
    while($row = mysql_fetch_array($q)){
        if ($subjects[$row['SUBJECT']] == nil) {
            $subjects[$row['SUBJECT']] = array();
        }
        array_push($subjects[$row['SUBJECT']], $row['STAFF_ID']);
    }
foreach ($subjects as $key=>$value) {
    echo $key . '<br>;
    foreach ($vaue as amp;$staff) {
        echo $staff . '<br>';
    }
}
  

Ответ №5:

     $result=mysql_query("SELECT * from table GROUP BY subject");

    while($ext=mysql_fetch_object($result)) {
        $query=mysql_query(" SELECT * from table WHERE subject='".$ext->subject."'");
        echo $ext->subject;

        while($res=mysql_fetch_object($query)) {
            echo $res->staff_id;
        }    
    }