Formatting the results of a MySQL query as if it were run from the console

后端 未结 7 2167
清酒与你
清酒与你 2020-12-16 15:04

I\'m writing a quick and dirty reporting script that queries a report and emails the results. When using the MySQL console the results are in a nicely formatted table:

7条回答
  •  渐次进展
    2020-12-16 15:24

    You have to do it yourself.

    do a loop to find the max size for each column. Then output each row padding to that size +2 with a space at the beginning and end. seperate each column with a |.

    Use + and - to create your top and bottom.

    It's hard to give a concrete example without knowing what you're using to get your results. But assuming you're using mysql_query. Here's an example.

    $conn = mysql_connect("localhost", "mysql_user", "mysql_password");
    mysql_select_db("mydbname");
    $result = mysql_query("SELECT * FROM myTable");
    //first get your sizes
    $sizes = array();
    $row = mysql_fetch_assoc($result);
    foreach($row as $key=>$value){
        $sizes[$key] = strlen($key); //initialize to the size of the column name
    }
    while($row = mysql_fetch_assoc($result)){
        foreach($row as $key=>$value){
            $length = strlen($value);
            if($length > $sizes[$key]) $sizes[$key] = $length; // get largest result size
        }
    }
    mysql_data_seek($result, 0); //set your pointer back to the beginning.
    
    //top of output
    foreach($sizes as $length){
        echo "+".str_pad("",$length+2,"-");
    }
    echo "+\n";
    
    // column names
    $row = mysql_fetch_assoc($result);
    foreach($row as $key=>$value){
        echo "| ";
        echo str_pad($key,$sizes[$key]+1);
    }
    echo "|\n";
    
    //line under column names
    foreach($sizes as $length){
        echo "+".str_pad("",$length+2,"-");
    }
    echo "+\n";
    
    //output data
    do {
        foreach($row as $key=>$value){
            echo "| ";
            echo str_pad($value,$sizes[$key]+1);
        }
        echo "|\n";
    } while($row = mysql_fetch_assoc($result));
    
    //bottom of output
    foreach($sizes as $length){
        echo "+".str_pad("",$length+2,"-");
    }
    echo "+\n";
    

    That would do it (I hope I didn't miss a semicolon in there :) ).

    Hope that helps!

提交回复
热议问题