Юмор: Израильский SQL-сервер отвечает запросом на запрос. :-)

Наверняка многие из Вас сталкивались с необходимостью получения данных из таблицы базы данных MySQL и последующего их вывода в виде обычной таблицы с использованием языка HTML. В сегодняшнем материале я расскажу как это сделать.

Код довольно прост, сперва нам нужно осуществить соединение с базой данных, например, таким образом:

session_start();
require_once("../unit_db.php");
include("../const_dirs.php");
$db = new db_processor();
$db->connect();
?>

или, что более вероятно, таким:

   /* Соединение, выбор БД */
    $link = mysql_connect("127.0.0.1", "demos", "3133") or die($ccdb.".
");
    mysql_query("SET NAMES cp1251"); //устанавливаем кодировку для соединения, если требуется
    mysql_query("SET SESSION group_concat_max_len = 2048"); //Максимальный размер для функции GROUP_CONCT(). Введена с версии 4.1.0., чаще не требуется
    mysql_select_db("demos".$test) or die($csdb.".
");
?>
 

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

$query = "SELECT q.questionid, QuestionText, group_concat('- ',answertext SEPARATOR ',') as answer
          FROM questions as q, answers as a
          WHERE q.questionid=a.questionid
          and AnswerIsRight=1
          group by q.questionid, QuestionText
          order by 1";

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

$result = $db->query($query);
?>

Для второго - таким:


$result = mysql_query($query, $link) or die(mysql_error());
?>

И, наконец, выводим результат:

     while ($line = mysql_fetch_array($result, MYSQL_BOTH)) {
       //echo implode('',$line);
       echo ''.$line[0].''.$line[1].''.$line[2];
     }
?>

Обратите внимание на строки

//echo implode('',$line);
echo ''.$line[0].''.$line[1].''.$line[2];

Если мы раскомментируем первую и закомментируем вторую - получим вывод всех полей результата, но они будут продублированы, потому что $result содержит по два значения для каждого поля с разными ключами: имя поля и номер поля.

В остальном можете поэкспериментировать самостоятельно.

Удачных Вам проектов!

P.S.

Мне попалась база с проблемами с кодировкой, поэтому запрос на выборку данных пришлось задавать таким образом:

 

SELECT CONVERT(CONVERT(TestTitle USING binary) USING cp1251) as testtitle, q.questionid, CONVERT(CONVERT(questiontext USING binary) USING cp1251) as Вопрос,
CONVERT(CONVERT(group_concat('- ',answertext SEPARATOR '\n')USING binary) USING cp1251) as Ответы
          FROM questions as q, answers as a, tests as t
          WHERE q.questionid=a.questionid
      and q.testid=t.testid
          and AnswerIsRight=1
          group by testtitle, q.questionid, QuestionText
          order by 1,2
limit 100000

и таким


SELECT CONVERT(CONVERT(Test USING binary) USING cp1251) as testtitle,
       q.id,
       CONVERT(CONVERT(q.text USING binary) USING cp1251) as Вопрос,
       CONVERT(CONVERT(group_concat('- ',a.text SEPARATOR '\n')USING binary) USING cp1251) as Ответы
          FROM edu_questions as q, edu_answers as a, edu_tests as t
          WHERE q.id=a.Question
      and q.test=t.id
          and IsRight=1
          group by testtitle, q.id, q.Text
          order by 1,2
limit 100000

 

Add comment


Security code
Refresh