Отображение таблиц MySQL как ASCII в сообщениях блога - PullRequest
0 голосов
/ 04 марта 2009

Я хотел бы быстро отобразить наборы записей MySQL в сообщениях блога, используя макет ASCII, аналогичный тому, который используется mysql.com на их страницах справки. Я использую WordPress v2.7. Есть идеи? Я также должен добавить, что я использую wp-синтаксис для подсветки синтаксиса, так что это действительно просто генерирование ASCII, в котором я интересуюсь.

Ответы [ 3 ]

1 голос
/ 04 марта 2009

Если вы имеете в виду такие вещи, как

+----+------+
| id | name |
+----+------+
|  1 | Bob  |
|  2 | Mary |
|  3 | Jane |
|  4 | Lisa |
+----+------+

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

0 голосов
/ 04 марта 2009

Если вы хотите сделать это без вызова клиента командной строки, вот способ PHP. Обратите внимание, что это довольно грубый код, и я его не тестировал, я просто пытаюсь объяснить процесс. Это также будет выравнивать все по левому краю, я полагаю, что клиент mysql выравнивает числа по правому краю, эмулируя, что потребует немного больше работы, но ничего сложного.

Предполагая, что вы извлекли записи в массив только для ассоциаций с именем $resultset, используя что-то вроде функции fetch_all() mysqli_result:

// determine maximum value lengths for each column
foreach ($resultset as $result)
{
    foreach ($result as $col => $val)
    {
        if (strlen($val) > $max_length[$col])
        {
            $max_length[$col] = strlen($val);
        }
    }
}

// construct border lines
foreach ($max_length as $col_length)
{
    $border_line .= '+'.str_repeat('-', $col_length+2);
}
$border_line .= "+";

// print header
print $border_line."<br />\n";
foreach ($max_length as $col_name => $col_length)
{
    print '| '.str_pad($col_name, $col_length, ' ').' |';
}
print "<br />\n";
print $border_line."<br />\n";

// print data
foreach ($resultset as $result)
{
    foreach ($result as $col => $val)
    {
        print '| '.str_pad($val, $max_length[$col], ' ').' |';
    }
    print "<br />\n";
}
print $border_line."<br />\n";
0 голосов
/ 04 марта 2009

ASCII, о котором вы говорите, - это способ, которым клиент командной строки MySQL выдает свои результаты.

mysql> select task_nextrun,task_name from pref_task;
+--------------+-----------------+
| task_nextrun | task_name       |
+--------------+-----------------+
|   1235999760 | datacache_clean |
|   1236002760 | process_stats   |
+--------------+-----------------+
2 rows in set (0.00 sec)

mysql>

Вам просто нужно отправить свои команды клиенту командной строки MySQL.

...