3

我正在尝试以带有列名的结构化形式在 bash 中回显 SELECT 请求的输出。问题是我不能正确使用超过 2 个字段,或者如果值大于列名。

例子 :

我的表如下所示: value1 value2

如果我在 bash 中这样做: echo "select value1, value2 from table" | mysql -uUSER -pPASS

结果在 bash 中如下所示:

值1 值2
广告  
是
参考

现在,如果我有 3 个字段或较大的值,则结果如下所示:

值1 值2 值3
aaaaaaaaa ddddddddddd ggg
bbbb eeeeeeeee hhhh
ccccccc fffffffff iii

有没有一种简单的方法来获得结构化的结果?我的意思是列名的间距正确吗?我知道可以通过排序来获得最大值并添加所需的空格数,但对于像这样的简单问题来说似乎太多了。

你有想法吗?谢谢 !

4

3 回答 3

4

使用 mysql -e 选项执行查询,使用 -t 选项将表输出打印到标准输出:

mysql -uUSER -t -e "从表中选择 value1, value2, value3" -pPASS

您的输出将如下所示:

+-----------+-------------+--------+
| value1    | value2      | value3 |
+-----------+-------------+--------+
| aaaaaaaaa | ddddddddddd | ggg    |
| bbbb      | eeeeeeeee   | hhhh   |
| ccccccc   | fffffffff   | iiii   |
+-----------+-------------+--------+

从 mysql 手册页:

--execute=statement, -e statement

       Execute the statement and quit. The default output format is like that produced with --batch. See Section 4.2.3.1, “Using Options on
       the Command Line”, for some examples. With this option, mysql does not use the history file.

-table, -t

       Display output in table format. This is the default for interactive use, but can be used to produce table output in batch mode.
于 2013-07-06T13:23:26.980 回答
1
echo "select value1, value2 from table" | mysql -uUSER -pPASS | column -t
于 2013-07-06T15:40:49.233 回答
0

做到这一点的一个好方法是不使用 Echo 将 Everything 打印到网页上,而是需要为 Each 分配一个数组变量。

将是这样的:

int x[50];

x[i] = $value // which is from SELECT Query
i++

并将其放入循环中,因此每次的结果都会存储在数组的新位置中。将所有结果保存在数组中后,组织起来会容易得多,您可以使用 HTML 中的表格

<table />

并组织它以使您可以轻松地将变量数组放入循环中,因此基本上您将有 2 个循环。第一个循环将数组分配给数据库属性,第二个循环将用于在 HTML 表中打印。

于 2013-07-06T12:11:41.340 回答