ФорумПрограммированиеPHP для идиотов → Начал писать скрипт

Начал писать скрипт

  • xDD

    Сообщения: 17 Репутация: N Группа: Кто попало

    Spritz 7 февраля 2011 г. 19:52

    Решил написать скрипт вот решил поинтересоваться может уже есть такой скрипт  и не надо заново изобретать велосипед. А если нет то может подскажите как лучше организовать структуру базы данных и вывод результата.
    И так к делу:
    Нужно вывести таблицу следующего содержания



    Я придумал два варианта со  схемами баз данных  и кодом (пока кода немного )
    Первый вариант
    Таблица №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>



    Если кто знает есть такой скрипт или может подсказать буду рад услышать варианты.
  • Kvs

    Сообщения: 420 Репутация: N Группа: Кто попало

    Spritz 7 февраля 2011 г. 20:38, спустя 46 минут 22 секунды

    <TD><INPUT TYPE='TEXT' NAME='str' size=8 VALUE=".$return[$j][$k]."></TD>
    <td> не?
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 7 февраля 2011 г. 20:40, спустя 1 минуту 41 секунду

    кончил писать скрипт
    Сапожник без сапог
  • }/{EHR

    Сообщения: 734 Репутация: N Группа: Адекваты

    Spritz 7 февраля 2011 г. 21:20, спустя 40 минут

    Чет я твоих таблиц вообще не понял.
  • Kvs

    Сообщения: 420 Репутация: N Группа: Кто попало

    Spritz 7 февраля 2011 г. 21:33, спустя 12 минут 39 секунд

    Щас если они узнаю что ты под joomla пишешь это)) точно кончишь))
  • AlexB

    Сообщения: 4306 Репутация: N Группа: в ухо

    Spritz 7 февраля 2011 г. 21:37, спустя 4 минуты 15 секунд

    Второй вариант однозначно. Отдельно таблицы игр и игроков.
    Говорю как специалист по спортивным скриптам. ))))))
  • xDD

    Сообщения: 17 Репутация: N Группа: Кто попало

    Spritz 7 февраля 2011 г. 22:22, спустя 44 минуты 33 секунды


    Щас если они узнаю что ты под joomla пишешь это)) точно кончишь))
    Да нет ) это таблицы от джумлы остались в майадмине, прост таблицы решил так же называть
    Спустя 130 сек.
    Вот на каком варианте остановился
    id_rezultat id_igrok rezultat id_igra fio
    1 1 8 1 Иванов
    2 2 3 1 Петров
    3 1 8 2 Иванов
    4 2 4 2 Петров

    Для получения того кто с кем играет делаю выборку из базы:


    $result = mysql_query("SELECT e.id_igra, e.id_igrok, e.fio, e.rezultat, d.id_igrok, d.fio, d.rezultat
    FROM jos_p_rezult_igroka e
    INNER JOIN jos_p_rezult_igroka d ON e.id_igra = d.id_igra
    WHERE d.id_igrok <> e.id_igrok and e.id_igrok< d.id_igrok
    ");

    Спустя 58 сек.
    Вот как выглядит код


    <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 e.id_igra, e.id_igrok, e.fio, e.rezultat, d.id_igrok, d.fio, d.rezultat
    FROM jos_p_rezult_igroka e
    INNER JOIN jos_p_rezult_igroka d ON e.id_igra = d.id_igra
    WHERE d.id_igrok <> e.id_igrok and e.id_igrok< d.id_igrok
    ");
    $num_rows = mysql_num_rows($result);
    $num_field=mysql_num_fields($result);

    $result2 = mysql_query("SELECT e.fio, d.fio
    FROM jos_p_rezult_igroka e
    INNER JOIN jos_p_rezult_igroka d ON e.id_igra = d.id_igra
    WHERE d.id_igrok <> e.id_igrok and e.id_igrok< d.id_igrok
    ");
    ?>
    <?php
    while ($row = mysql_fetch_array($result2,MYSQL_NUM)) {

    $return2[]=$row;
    }

    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>ФИО</TH>");
    $p=count($return2)-1;
    for($k=0;$k<count($return2)-$p;$k++)
    { echo "count(return[k])=".count($return2[$k])."<br>";
    print_r($return2[$k]);
    for ($j=0;$j<=count($return2[$k])-1; $j++)
    echo ("<TH>".$return2[$k][$j]."</TH>");
    }
    echo ("</TR>");

    //kishki

    for($j=0;$j<count($return);$j++){
    echo "общий массив ";
    print_r($return[$j]);
    $t=count($return[$j])-1;
    //echo count($return[$j])-$t;
    for($k=0;$k<count($return[$j])-$t;$k++)
    {echo "<br>[".$j."][".$k."]= ".$return[$j][$k]."";
    echo "<tr><TD><INPUT TYPE='TEXT' NAME='str' size=8 VALUE=".$return2[$j][$k+$j]."></TD>";
    //problema nachinaetsya zdec zaciklivaetsya
    //for($i=0;i<3;$i++)
    echo "<TD><INPUT TYPE='TEXT' NAME='str' size=3 VALUE=111></TD><TD><INPUT TYPE='TEXT' NAME='str' size=3 VALUE=111></TD>";

    }
    echo "</tr>";
    }

    echo "</table >";

    ?>

    </BODY>
    </HTML>

    Спустя 115 сек.
    Проблема начинаеться здесь

    for($k=0;$k<count($return[$j])-$t;$k++)
    {echo "<br>[".$j."][".$k."]= ".$return[$j][$k]."";
    echo "<tr><TD><INPUT TYPE='TEXT' NAME='str' size=8 VALUE=".$return2[$j][$k+$j]."></TD>";
    //problema nachinaetsya zdec zaciklivaetsya
    //for($i=0;i<3;$i++)
    echo "<TD><INPUT TYPE='TEXT' NAME='str' size=3 VALUE=111></TD><TD><INPUT TYPE='TEXT' NAME='str' size=3 VALUE=111></TD>";

    }
    echo "</tr>";


    В общем как кишки заполнять пока не догадался
  • AlexB

    Сообщения: 4306 Репутация: N Группа: в ухо

    Spritz 7 февраля 2011 г. 22:41, спустя 19 минут 19 секунд

    У меня есть старый скрипт, который шахматку рисует на основе XTemlate шаблона, правда сильно сомневаюсь что поможет … )))))
  • xDD

    Сообщения: 17 Репутация: N Группа: Кто попало

    Spritz 8 февраля 2011 г. 0:27, спустя 1 час 46 минут 30 секунд

    Скиньте если не жалко )
  • xDD

    Сообщения: 17 Репутация: N Группа: Кто попало

    Spritz 10 февраля 2011 г. 1:37, спустя 2 дня 1 час 9 минут

    Тема закрыта вопрос практически решен

Пожалуйста, авторизуйтесь, чтобы написать комментарий!