И так к делу:
Нужно вывести таблицу следующего содержания
Я придумал два варианта со схемами баз данных и кодом (пока кода немного )
Первый вариант
Таблица №1 результат игрока
CREATE TABLE IF NOT EXISTS `jos_p_rezult_igroka` (
`id_rezultat` int(5) NOT NULL AUTO_INCREMENT,
`id_igrok` int(5) NOT NULL,
`rezultat` int(5) NOT NULL,
`id_igra` int(5) NOT NULL,
`fio` text NOT NULL,
PRIMARY KEY (`id_rezultat`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 ;
Таблица №2 Игра в турнире.
CREATE TABLE IF NOT EXISTS `jos_p_turnir` (
`id_igra` int(5) NOT NULL AUTO_INCREMENT,
`id_turnir` int(5) NOT NULL,
PRIMARY KEY (`id_igra`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 ;
Этот вариант кажется мне более простым, правда вот какие проблемы
Например делаю запрос "С кем играл игрок?"
Вот как выглядит запрос:
SELECT e.id_igrok, e.rezultat, d.id_igrok, d.rezultat
FROM jos_p_rezult_igroka e
INNER JOIN jos_p_rezult_igroka d ON d.id_igra = e.id_igra
При тестовых данных
INSERT INTO `jos_p_rezult_igroka` (`id_rezultat`, `id_igrok`, `rezultat`, `id_igra`, `fio`) VALUES
(1, 1, 8, 1, 'Иванов'),
(2, 2, 3, 1, 'Петров'),
(3, 1, 8, 2, 'Иванов'),
(4, 2, 4, 2, 'Петров');
Выводится результат такого характера
id_igrok rezultat id_igrok rezultat
1 8 1 8
2 3 1 8
1 8 2 3
2 3 2 3
1 8 1 8
2 4 1 8
1 8 2 4
2 4 2 4
Когда я ожидаю вот таких значений
id_igrok rezultat id_igrok rezultat
1 8 2 3
2 3 1 8
1 8 2 4
2 4 1 8
Как сделать чтобы в запросе выводились только мне нужные варианты я не понял.
Это пока все что я успел сделать с этим вариантом.
Код в данном случае еще даже не начал разрабатываться
Второй вариант
Схема бд:
CREATE TABLE IF NOT EXISTS `jos_t_igra` (
`id` int(5) NOT NULL AUTO_INCREMENT,
`igr1` int(5) NOT NULL,
`igra1part1` varchar(5) NOT NULL,
`igra1part2` varchar(5) NOT NULL,
`igr2` int(5) NOT NULL,
`igra2part1` varchar(5) NOT NULL,
`igra2part2` varchar(5) NOT NULL,
`igrok1sch1` varchar(5) NOT NULL,
`igrok1sch2` varchar(5) NOT NULL,
`igrok2sch1` varchar(5) NOT NULL,
`igrok2sch2` varchar(5) NOT NULL,
`Ob_sch` varchar(5) NOT NULL,
`id_turnira` int(5) NOT NULL,
`published` tinyint(4) NOT NULL,
`checked_out` tinyint(4) NOT NULL,
PRIMARY KEY (`id`),
KEY `igr1` (`igr1`,`igr2`,`igrok2sch2`,`id_turnira`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 ;
CREATE TABLE IF NOT EXISTS `jos_t_igrok` (
`id` int(5) NOT NULL AUTO_INCREMENT,
`name` varchar(40) NOT NULL,
`rez` int(5) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 ;
Вот тестовые данные для этого варианта
INSERT INTO `jos_t_igrok` (`id`, `name`, `rez`) VALUES
(2, 'Петров', 80),
(1, 'Шариков', 77);
INSERT INTO `jos_t_igra` (`id`, `igr1`, `igra1part1`, `igra1part2`, `igr2`, `igra2part1`, `igra2part2`, `igrok1sch1`, `igrok1sch2`, `igrok2sch1`, `igrok2sch2`, `Ob_sch`, `id_turnira`, `published`, `checked_out`) VALUES
(1, 1, '3', '8', 2, '4', '8', '0', '0', '1', '1', '0', 1, 0, 0),
(2, 2, '8', '3', 1, '8', '4', '1', '1', '0', '0', '2', 1, 0, 0);
К этому варианту написал немножко кода, в этом коде пытался организовать вывод таблицы, но при добавлении третьего внутреннего цикла, почему то из цикла он выйти не может:
<HTML>
<HEAD>
<TITLE>Элементы Text</TITLE></HEAD>
<BODY>
<?php
@mysql_connect("localhost","root","admin")or die ('Error');
@mysql_select_db("admin") or die(mysql_error());
mysql_query ("set character_set_client='utf8'");
mysql_query ("set character_set_results='utf8'");
mysql_query ("set collation_connection='utf8_general_ci'");
$result = mysql_query("SELECT l.name, d.name, e.ob_sch
FROM jos_t_igra e
INNER JOIN jos_t_igrok d ON d.id = e.igr2
INNER JOIN jos_t_igrok l ON l.id = e.id");
$num_rows = mysql_num_rows($result);
$num_field=mysql_num_fields($result);
?>
<?php
while ($row = mysql_fetch_array($result,MYSQL_NUM)) {
$return[]=$row;
}
echo " <br><br>";
//print_r($return);
error_reporting(7);
echo "<br>$num_rows Rows\n<br>";
echo "$num_field Field\n<br>";
echo "<b> count(return)=".count($return)."</b>";
echo "<table border='1'>";
//var_dump($result);
//shapka
echo ("<TH>111</TH>");
$p=count($return)-1;
for($k=0;$k<count($return)-$p;$k++)
{ //echo "count(return[k])=".count($return[$k])."<br>";
//print_r($return[$k]);
for ($j=0;$j<count($return[$k])-1; $j++)
echo ("<TH>".$return[$k][$j]."</TH>");
}
echo ("</TR>");
//kishki
for($j=0;$j<count($return);$j++){
echo "<TR>";
//print_r($return[$j]);
$t=count($return[$j])-1;
//echo count($return[$j])-$t;
for($k=0;$k<count($return[$j])-$t;$k++)
{//echo "<td> <input type=text size=5 value=" . print_r($return[$j])."><p> [j]".count($return[$j])."</p></td>";
echo "<TD><INPUT TYPE='TEXT' NAME='str' size=8 VALUE=".$return[$j][$k]."></TD>";
//problema nachinaetsya zdec zaciklivaetsya
//for($i=0;i<3;$i++){
// echo "<TD><INPUT TYPE='TEXT' NAME='str' size=3 VALUE=111></TD>";
//}
}
echo "</tr>";
}
echo "</table >";
?>
</BODY>
</HTML>
Если кто знает есть такой скрипт или может подсказать буду рад услышать варианты.