#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;
}
}