Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Ведомость оценок
 
 автор: andkoinov   (12.02.2009 в 14:16)   письмо автору
 
 

Здравствуйте.
Имеются таблицы со списками студентов, дисциплинами, и оценками. Как вывести оценки студентов по различным дисциплинам и фамилиям. Оценка находилась на пересечении студент, дисциплина. Таблица оценки связана с таблицами студенты, дисциплины.

  Ответить  
 
 автор: Slo_Nik   (12.02.2009 в 15:50)   письмо автору
 
   для: andkoinov   (12.02.2009 в 14:16)
 

я так понимаю, что тебе надо выводить дисциплины и привязывать к ним фамилии и оценки.
объедени в одном запросе обращение к трём своим таблицам.
не зная структуры твоих таблиц, трудно сказать как именно и по каким полям делать выборку из БД.

  Ответить  
 
 автор: andkoinov   (15.02.2009 в 13:52)   письмо автору
 
   для: Slo_Nik   (12.02.2009 в 15:50)
 

Проблема не в выборке, а в том как при помощи php вывести на html страницу.

  Ответить  
 
 автор: cheops   (15.02.2009 в 15:22)   письмо автору
 
   для: andkoinov   (15.02.2009 в 13:52)
 

Все-равно не понятно, имеется в виду как заставить выполняться PHP код на странице с расширением html или как извлекать данные из базы данных при помощи PHP?

  Ответить  
 
 автор: HaJIuBauKa   (15.02.2009 в 15:45)   письмо автору
 
   для: andkoinov   (15.02.2009 в 13:52)
 

вот так вапщет:
<?php
echo 'Студент '.row['name'].' получил '.row['ocenka'].' по предмету '.row['predmet'];
?>

  Ответить  
 
 автор: nek-v   (15.02.2009 в 15:57)   письмо автору
 
   для: HaJIuBauKa   (15.02.2009 в 15:45)
 

и? в чем проблема?

  Ответить  
 
 автор: andkoinov   (16.02.2009 в 11:17)   письмо автору
26.5 Кб
 
   для: nek-v   (15.02.2009 в 15:57)
 

Постараюсь объяснить, создаю таблицы
создаю таблицу для фамилий, дисциплин,

CREATE TABLE `maindata` (
`PIN` INT( 6 ) NOT NULL AUTO_INCREMENT ,
`Family` VARCHAR( 255 ) NOT NULL ,
`FirstName` VARCHAR( 255 ) NOT NULL ,
`SecName` VARCHAR( 255 ) NOT NULL ,
PRIMARY KEY ( `PIN` )
);
CREATE TABLE `disc` (
  `idds` int(4) NOT NULL auto_increment,
  `discipl` varchar(255) default NULL,
  PRIMARY KEY  (`idds`)
);
CREATE TABLE `ocenka` (
  `idoc` int(4) NOT NULL auto_increment,
  `idst` int(4) default NULL,
  `idpr` int(4) NOT NULL,
  `ball` varchar(255) default NULL,
  PRIMARY KEY  (`idoc`)
)  ;

пытаюсь создать ведомость оценок

echo "<table>";
$result = mysql_query("SELECT * FROM ocenka,disc WHERE disc.idds=ocenka.idpr",$db);
$myrow = mysql_fetch_array($result);
echo "<tr>";
echo "<td>";
echo "Фамилия";
echo "</td>";
do 
{
printf (" 
   <td> %s </td>
"
,$myrow["discipl"]);
}
while ($myrow = mysql_fetch_array($result));
echo "</tr>";
$result1 = "SELECT * FROM maindata,ocenka,disc WHERE maindata.PIN=ocenka.idst AND maindata.idgr=ocenka.idg AND disc.idds=ocenka.idpr";
$myrow1 = mysql_query($result1); 
if(!$myrow1) exit(mysql_error()); 
while($prep = mysql_fetch_array($myrow1)) 

echo "<tr>";
echo "<td>";
echo $prep['Family'].  $prep['FirstName']. $prep['SecName']. "<br>";   
$id = $prep['PIN'];
echo "</td>";
$result2 = "SELECT * FROM maindata,ocenka,disc WHERE maindata.PIN=ocenka.idst AND maindata.idgr=ocenka.idg AND disc.idds=ocenka.idpr";
$com = mysql_query($result2); 
if(!$com) exit(mysql_error()); 
if(mysql_num_rows($com)>0)
{
while($comment = mysql_fetch_array($com)) 
{
echo "<td>";
echo $prep['ball'];   
echo "</td>";
}
}

}
echo  "</tr>";
}
echo "</table>";

Хочу сделать ведомость
\ Дисциплина \ Дисциплина
Фамилия 5 5
Фамилия 5 5

  Ответить  
 
 автор: Slo_Nik   (16.02.2009 в 13:24)   письмо автору
 
   для: andkoinov   (16.02.2009 в 11:17)
 

ты создаёшь таблицы, но они у тебя не связаны суррогатными ключами.
примерно так

CREATE TABLE `maindata` ( 
`PIN` INT( 6 ) NOT NULL AUTO_INCREMENT , 
`Family` VARCHAR( 255 ) NOT NULL , 
`FirstName` VARCHAR( 255 ) NOT NULL , 
`SecName` VARCHAR( 255 ) NOT NULL , 
`idds` int(4) NOT NULL DEFAULT '0',
PRIMARY KEY ( `PIN` ) 
); 
CREATE TABLE `disc` ( 
  `idds` int(4) NOT NULL auto_increment, 
  `discipl` varchar(255) default NULL,
  `id_pin INT(6) NOT NULL DEFAULT '0', 
  PRIMARY KEY  (`idds`) 
);

по тому, что выделено жирным и проводи связь с таблицами.
для третьей таблицы тоже сделатй такой ключ.
тогда должно получится, что когда выводишь список дисциплин, по клику на любой из них появляется список студентов с оценками напротив фамилий
запрос можно сделать так

<a href='disciplina.php?pin=$idds'>Дисциплина</a>

$idds эту переменную можно получить выполнив запрос к таблице с фамилиями.
вернее чуть не так.
у тебя же первая таблица идёт с фамилиями, тогда просто изменить

<a href='family.php?pin=$idds'>Список студентов</a>

и тогда получишь список фамилий с дисциплинами напротив, а привязав таблицу с оценками, у тебя появятся и ещё оценки.

  Ответить  
 
 автор: Trianon   (16.02.2009 в 13:48)   письмо автору
 
   для: andkoinov   (16.02.2009 в 11:17)
 

<STYLE>
table { border-collapse: collapse; background-color: #DDDDDD }
td { border: 1px solid #666666; text-align: center; padding: 3px }
th { border: 1px solid #666666; text-align: left; padding: 3px ;  color: #770000 }
tr.d { color: #000077 ; text-align: center ; font-weight: bold }
</STYLE>
<?php
  
require_once('dbconfig.php');   mysql_select_db('test');
  
$map = array();
  
$oclist = array();
  
$stlist = array();
  
$sql "SELECT idst, idpr, ball FROM ocenka";
  
$res mysql_query($sql) or die("Error in $sql : "mysql_error());
  while(
$row mysql_fetch_assoc($res))
  {
      
$map[$row['idst']][$row['idpr']] = $row['ball'];
      
$oclist[] = $row['idpr'];
      
$stlist[] = $row['idst'];
  }
  if(!empty(
$oclist))
  {
    
$oclist implode(','$oclist);
    
$sql "SELECT idds, discipl FROM disc
             WHERE idds IN (
$oclist)
             ORDER BY discipl "
;
    
$oclist = array();
    
$res mysql_query($sql) or die("Error in $sql : "mysql_error());
    echo 
'<table><tr class=d><td></td>';
    while(
$row mysql_fetch_assoc($res))
        echo 
'<td> '
        
.htmlspecialchars($oclist[$row['idds']] = $row['discipl'])
        .
" </td>";
    echo 
"</tr>\r\n";

    
$stlist implode(','$stlist);
    
$sql "SELECT PIN,
              CONCAT(Family, ' ', LEFT(FirstName, 1),'.',LEFT(FirstName, 1),'.') AS FIO
               FROM maindata
               WHERE PIN IN (
$stlist)
             ORDER BY FIO"
;
    
$stlist = array();
    
$res mysql_query($sql) or die("Error in $sql : "mysql_error());
    while(
$row mysql_fetch_assoc($res))
      if( isset(
$map[$row['PIN']]))
    {
        
$ocmap $map[$row['PIN']];
        echo 
'<tr><th> '.htmlspecialchars($row['FIO']) . " </td>";
        foreach(
$oclist as $ocid => $oc)
          echo 
"<td> ".htmlspecialchars(@$ocmap[$ocid])." </td>";
        echo 
"</tr>\r\n";
    }
    echo 
"</table>\r\n";
  }
?>

  Ответить  
 
 автор: Slo_Nik   (16.02.2009 в 14:16)   письмо автору
 
   для: Trianon   (16.02.2009 в 13:48)
 

а что тебя смущает в стилях? получается аккуратная рамка
единственное, что я не понял, ты в стилях пишешь "td", а в классах применяешь совсем другое обозначение
<td class=s>
(пример)
убери class=s и остальные и замени в стилях цвет, например, на red и ты получишь рамку расного цвета.

  Ответить  
 
 автор: Trianon   (16.02.2009 в 16:10)   письмо автору
 
   для: Slo_Nik   (16.02.2009 в 14:16)
 

спасибо, вопрос снят.
стили я поправил.

  Ответить  
 
 автор: Slo_Nik   (16.02.2009 в 17:26)   письмо автору
 
   для: Trianon   (16.02.2009 в 16:10)
 


<STYLE> 
table {border-collapse: collapse;} 
td { border: 1px solid #666666;
width: 100px;
height:30px;
    text-align: center 

</STYLE> 
</head>
<body>

в таблице убери в <td>, везде class, он тут не нужен.
если бы ты написал в стилях .class, тогда бы надо было писать <td class='class'>.
ну и задал я размер ячейки, что бы было куда сдвигать содержимое.
p.s. пока писал ответ, ты вопрос снял... опять опередил :):):):)

  Ответить  
 
 автор: Trianon   (16.02.2009 в 17:32)   письмо автору
 
   для: Slo_Nik   (16.02.2009 в 17:26)
 

там где не нужен - убрал.
Где нужен - оставил.

  Ответить  
 
 автор: Slo_Nik   (16.02.2009 в 17:37)   письмо автору
 
   для: Trianon   (16.02.2009 в 17:32)
 

вот этого .s { text-align: left }
.d { color: #000077 }
в первом варианте не было, поэтому и написал, что бы ты убрал class.
ну а в таком случае всё правильно.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования