|
|
|
| Здравствуйте.
Имеются таблицы со списками студентов, дисциплинами, и оценками. Как вывести оценки студентов по различным дисциплинам и фамилиям. Оценка находилась на пересечении студент, дисциплина. Таблица оценки связана с таблицами студенты, дисциплины. | |
|
|
|
|
|
|
|
для: andkoinov
(12.02.2009 в 14:16)
| | я так понимаю, что тебе надо выводить дисциплины и привязывать к ним фамилии и оценки.
объедени в одном запросе обращение к трём своим таблицам.
не зная структуры твоих таблиц, трудно сказать как именно и по каким полям делать выборку из БД. | |
|
|
|
|
|
|
|
для: Slo_Nik
(12.02.2009 в 15:50)
| | Проблема не в выборке, а в том как при помощи php вывести на html страницу. | |
|
|
|
|
|
|
|
для: andkoinov
(15.02.2009 в 13:52)
| | Все-равно не понятно, имеется в виду как заставить выполняться PHP код на странице с расширением html или как извлекать данные из базы данных при помощи PHP? | |
|
|
|
|
|
|
|
для: andkoinov
(15.02.2009 в 13:52)
| | вот так вапщет:
<?php
echo 'Студент '.row['name'].' получил '.row['ocenka'].' по предмету '.row['predmet'];
?>
|
| |
|
|
|
|
|
|
|
для: HaJIuBauKa
(15.02.2009 в 15:45)
| | и? в чем проблема? | |
|
|
|
|
 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 | |
|
|
|
|
|
|
|
для: 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>
|
и тогда получишь список фамилий с дисциплинами напротив, а привязав таблицу с оценками, у тебя появятся и ещё оценки. | |
|
|
|
|
|
|
|
для: 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";
}
?>
|
| |
|
|
|
|
|
|
|
для: Trianon
(16.02.2009 в 13:48)
| | а что тебя смущает в стилях? получается аккуратная рамка
единственное, что я не понял, ты в стилях пишешь "td", а в классах применяешь совсем другое обозначение
(пример)
убери class=s и остальные и замени в стилях цвет, например, на red и ты получишь рамку расного цвета. | |
|
|
|
|
|
|
|
для: Slo_Nik
(16.02.2009 в 14:16)
| | спасибо, вопрос снят.
стили я поправил. | |
|
|
|
|
|
|
|
для: 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. пока писал ответ, ты вопрос снял... опять опередил :):):):) | |
|
|
|
|
|
|
|
для: Slo_Nik
(16.02.2009 в 17:26)
| | там где не нужен - убрал.
Где нужен - оставил. | |
|
|
|
|
|
|
|
для: Trianon
(16.02.2009 в 17:32)
| | вот этого .s { text-align: left }
.d { color: #000077 } в первом варианте не было, поэтому и написал, что бы ты убрал class.
ну а в таком случае всё правильно. | |
|
|
|