Вывод информации

Aidar

Guest
Вывод информации


Имеется список специальностей вуза:

1 - Факультет автоматизации и прогрессивных технологий (АиПТ):

Код | Название
--------------------------------------------------
1201 | Технология машиностроения
1203 | Машины и технология литейного производства
...

2 - Автомеханический факультет:

Код | Название
------------------------------------------------------------------
1012 - Двигатели внутреннего сгорания
1211 - Гидравлические машины, гидропривод и гидропневмоавтоматика
1501 - Автомобиле- и тракторостроение
...

Все они хранятся в таблице speciality:

Id|Fak| Code | Specname
-----------------------------------------------------------------------
1 | 1 | 2102 | Автоматизация технологических процессов и производ...
2 | 2 | 1012 | Двигатели внутреннего сгорания
3 | 1 | 1201 | Технология машиностроения
...

Где Fak соответственно факультет.

Для вывода данной информации я пользовался конструкцией while:

PHP:
... //заголовок таблицы
<?
$result = mysql_query( "select * from speciality order by Fak" );
$i = 0;
while( $spec = mysql_fetch_array( $result ) ) {
$i++;
?>
<tr>
<td><? echo $i; ?></td>
<td><? echo $spec["Code"]; ?></td>
<td><? echo $spec["Specname"]; ?></td>
<td> //опции </td></tr>
<?php
}
?>

При этом название факультета не отображалось:

|-----------------------------------------------------------------------------------------------|
|..........................................База данных..........................................|
|-----------------------------------------------------------------------------------------------|
|№ |Номер |.......................Название........................|............Опции............|
|--|------|-------------------------------------------------------|-----------------------------|
|1 | 2102 | Автоматизация технологических процессов и производств | [ редактировать | удалить ] |
|--|------|-------------------------------------------------------|-----------------------------|
|2 | 1201 | Технология машиностроения.............................| [ редактировать | удалить ] |
|--|------|-------------------------------------------------------|-----------------------------|
|3 | 1012 | Двигатели внутреннего сгорания........................| [ редактировать | удалить ] |
|-----------------------------------------------------------------------------------------------|

Как можно при помощи все той же конструкции вывести информацию следующим образом?:

|-----------------------------------------------------------------------------------------------|
|..........................................База данных..........................................|
|-----------------------------------------------------------------------------------------------|
|№ |Номер |.......................Название........................|............Опции............|
|-----------------------------------------------------------------------------------------------|
|........................Факультет автоматизации и прогрессивных технологий.....................|
|-----------------------------------------------------------------------------------------------|
|1 | 2102 | Автоматизация технологических процессов и производств | [ редактировать | удалить ] |
|--|------|-------------------------------------------------------|-----------------------------|
|3 | 1201 | Технология машиностроения.............................| [ редактировать | удалить ] |
|-----------------------------------------------------------------------------------------------|
|....................................Автомеханический факультет.................................|
|-----------------------------------------------------------------------------------------------|
|2 | 1012 | Двигатели внутреннего сгорания........................| [ редактировать | удалить ] |
|--|------|-------------------------------------------------------|-----------------------------|
 

SiMM

Новичок
А на PHP сравнивать fak с предыдущим значением и выводить при несовпадении его название не бывает?
 

Aidar

Guest
Не понял... Конкретезируй. Небольшим примером плиз (если можно).

-~{}~ 22.04.05 23:58:

И какое может быть сравнение, тут же цикл...
 

Aidar

Guest
попробовал сделать так, но таже беда...
PHP:
<?php
$i = 0;
global $spec_now;
$spec_now = 1;
while( $spec = mysql_fetch_array( $result ) ) {
$i++;
if( $spec["Fak"] = $spec_now ) {
switch( $spec["Fak"] )
{
case 1: $spec["Fak"] = "Факультет автоматизации и прогрессивных технологий";break;
case 2: $spec["Fak"] = "Автомеханический факультет";break;
case 3: $spec["Fak"] = "Строительный факультет";break;
case 4: $spec["Fak"] = "Заочный факультет";break;
case 5: $spec["Fak"] = "Экономический факультет";break;
case 6: $spec["Fak"] = "Центр дистанционного обучения - ЦДО";break;
}
echo "<tr>
<th colspan=\"4\">" . $spec["Fak"] . "</th>
</tr>";
$spec_now = $spec["Fak"];
} else { $spec_now++; }
?>
<tr>
<td><? echo $i; ?></td>
<td><? echo $spec["Code"]; ?></td>
<td><? echo $spec["Specname"]; ?></td>
<td>//опции</tr>
<?php
}
?>
 

SiMM

Новичок
> if( $spec["Fak"] = $spec_now )
[m]language.operators.comparison[/m]
> } else { $spec_now++; }
Это ещё зачем?
 

Aidar

Guest
Вот как решил проблему:
PHP:
<?php
$i = 0;
$spec_1 = 1;
$spec_2 = 2;
while( $spec = mysql_fetch_array( $result ) ) {
$i++;
if( $spec_1 != 0 && $spec["Fak"] == 1 ) {
$spec["Fak"] = "Факультет автоматизации и прогрессивных технологий";
echo "<tr>
<th colspan=\"4\">" . $spec["Fak"] . "</th>
</tr>";
$spec_1 = $spec["Fak"];
$spec_1--;
}
if( $spec_2 != 1 && $spec["Fak"] == 2 ) {
$spec["Fak"] = "Автомеханический факультет";
echo "<tr>
<th colspan=\"4\">" . $spec["Fak"] . "</th>
</tr>";
$spec_2 = $spec["Fak"];
$spec_2--;
}
?>
<tr>
<td><? echo $i; ?></td>
<td><? echo $spec["Code"]; ?></td>
<td><? echo $spec["Specname"]; ?></td>
<td><? /*if(GetSession('AdminLogin')) {	*/?> [ <a href="?speciality=edit&id=<?php echo $spec["Id"] ?>&offset=<?php echo $CurrentPage; ?>">редактировать</a> | <a href="?speciality=delete&id=<?php echo $spec["Id"] ?>&offset=<?php echo $CurrentPage; ?>">удалить</a> ]
</td></tr>
<?php
}
?>
-~{}~ 23.04.05 01:45:

поправка:
PHP:
<?php
$i = 0;
global $spec_now;
$spec_1 = 1;
$spec_2 = 2;
$spec_3 = 3;
$spec_4 = 4;
$spec_5 = 5;
$spec_6 = 6;
while( $spec = mysql_fetch_array( $result ) ) {
$i++;
if( $spec_1 != 0 && $spec["Fak"] == 1 ) {
$spec["Fak"] = "Факультет автоматизации и прогрессивных технологий";
echo "<tr>
<th colspan=\"4\">" . $spec["Fak"] . "</th>
</tr>";
$spec_1 = $spec["Fak"];
$spec_1--;
}
if( $spec_2 != 0 && $spec["Fak"] == 2 ) {
$spec["Fak"] = "Автомеханический факультет";
echo "<tr>
<th colspan=\"4\">" . $spec["Fak"] . "</th>
</tr>";
$spec_2 = $spec["Fak"];
$spec_2 - 2;
}
if( $spec_3 != 0 && $spec["Fak"] == 3 ) {
$spec["Fak"] = "Строительный факультет";
echo "<tr>
<th colspan=\"4\">" . $spec["Fak"] . "</th>
</tr>";
$spec_3 = $spec["Fak"];
$spec_3 - 3;
}
if( $spec_4 != 0 && $spec["Fak"] == 4 ) {
$spec["Fak"] = "Заочный факультет";
echo "<tr>
<th colspan=\"4\">" . $spec["Fak"] . "</th>
</tr>";
$spec_4 = $spec["Fak"];
$spec_4 - 4;
}
if( $spec_5 != 0 && $spec["Fak"] == 5 ) {
$spec["Fak"] = "Экономический факультет";
echo "<tr>
<th colspan=\"4\">" . $spec["Fak"] . "</th>
</tr>";
$spec_5 = $spec["Fak"];
$spec_5 - 5;
}
if( $spec_6 != 0 && $spec["Fak"] == 6 ) {
$spec["Fak"] = "Центр дистанционного обучения - ЦДО";
echo "<tr>
<th colspan=\"4\">" . $spec["Fak"] . "</th>
</tr>";
$spec_6 = $spec["Fak"];
$spec_6 - 6;
}
?>
<tr>
<td><? echo $i; ?></td>
<td><? echo $spec["Code"]; ?></td>
<td><? echo $spec["Specname"]; ?></td>
<td></tr>
<?php
}
?>
 

SiMM

Новичок
Это называется не решить проблему, а поставить временные костыли.
> И какое может быть сравнение, тут же цикл.
Ну и что?
PHP:
<?php
$faks = array(1 => 'Факультет автоматизации и прогрессивных технологий',
              2 => 'Автомеханический факультет',
              3 => 'Строительный факультет',
              4 => 'Заочный факультет',
              5 => 'Экономический факультет',
              6 => 'Центр дистанционного обучения - ЦДО',
             );
$fak_old = 0;
for ($i = 1; $spec = mysql_fetch_assoc($result); $i++):
  if ($spec['Fak'] != $fak_old):?>
<tr>
  <th colspan="4"><?=$faks[$fak_old = $spec['Fak']]?></th>
</tr>
<?
  else:
?>
<tr>
<td><?=$i?></td>
<td><?=$spec['Code']?></td>
<td><?=$spec['Specname']?></td>
<td>//опции</tr>
<?
  endif;
endfor;
?>
PS: только белые люди хранят базу факультетов не в коде, а в базе. Естесственно, прикрутив интерфейс для их редактирования. Код - на вскидку и не проверен - отладкой займись сам.
 

Aidar

Guest
Вот поправил чуток, а то первая специалньсть в каждом факе пропадает:
PHP:
<?php
$faks = array(1 => 'Факультет автоматизации и прогрессивных технологий',
              2 => 'Автомеханический факультет',
              3 => 'Строительный факультет',
              4 => 'Заочный факультет',
              5 => 'Экономический факультет',
              6 => 'Центр дистанционного обучения - ЦДО',
             );
$fak_old = 0;
for ($i = 1; $spec = mysql_fetch_assoc($result); $i++):
  if ($spec['Fak'] != $fak_old):?>
<tr>
  <th colspan="4"><?=$faks[$fak_old = $spec['Fak']]?></th>
</tr>
<tr>
<td><?=$spec['Id']?></td>
<td><?=$spec['Code']?></td>
<td><?=$spec['Specname']?></td>
<td align=center><? /*if(GetSession('AdminLogin')) {	*/?><a href="?action=edit&id=<?=$spec["Id"]?>&offset=<?=$CurrentPage;?>"><img src=<?=IMAGES_PATH."edit.png";?> border=0 alt='Редактировать'></a><a href="?action=delete&id=<?=$spec["Id"] ?>&offset=<?=$CurrentPage;?>"><img src=<?=IMAGES_PATH."delete.png";?> border=0 alt='Удалить'></a></td>
</tr>
<?
  else:
?>
<tr>
<td><?=$spec['Id']?></td>
<td><?=$spec['Code']?></td>
<td><?=$spec['Specname']?></td>
<td align=center>//options</td></tr>
<?
endif;
endfor;
?>
И еще. Специальности, у которых факультет имеет нечетный ключ выводятся в порядке возрастания, а специальности с четным ключом факультета в порядке убывания. Как исправить?
 

SiMM

Новичок
> а то первая специалньсть в каждом факе пропадает:
Для этого достаточно было убрать else и поставить endif на его месте.

> Специальности, у которых факультет имеет нечетный ключ выводятся в порядке возрастания, а специальности с четным ключом факультета в порядке убывания.
... ORDER BY Fak,Code
 
Сверху