I am trying to implement it in Go.how can i transpose the result but i have a problem in my code.how can i help me.
package main
import (
"database/sql"
"fmt"
_ "github.com/go-sql-driver/mysql"
)
this is function for tranpose the query when it fetch data from database
func transpose(slice [][]byte) [][]byte {
xl := len(slice[0])
yl := len(slice)
result := make([][]byte, xl)
for i := range result {
result[i] = make([]byte, yl)
}
for i := 0; i < xl; i++ {
for j := 0; j < yl; j++ {
result[i][j] = slice[j][i]
}
}
return result
}
I connect to the database
func main() {
db, err := sql.Open("mysql", "root:MyNewPassword1234567?@tcp(127.0.0.1:3306)/all_re")
defer db.Close()
if err != nil {
fmt.Println("Failed to connect", err)
return
}
rows, err := db.Query(`SELECT * from tdb`)
if err != nil {
fmt.Println("Failed to run query", err)
return
}
cols, err := rows.Columns()
if err != nil {
fmt.Println("Failed to get columns", err)
return
}
//fmt.Println(cols)
Result is your slice string.the result show as all of them show by row.
rawResult := make([][]byte, len(cols))
result := make([]string, len(cols))
A temporary interface{} slice.
dest := make([]interface{}, len(cols))
for i, _ := range rawResult {
dest[i] = &rawResult[i] // Put pointers to each string in the interface slice
}
for rows.Next() {
err = rows.Scan(dest...)
if err != nil {
fmt.Println("Failed to scan row", err)
return
}
//fmt.Println(dest...)
for i, raw := range rawResult {
if raw == nil {
result[i] = "\\N"
} else {
result[i] = string(raw)
}
fmt.Println(result[i])
ar := transpose(rawResult)
fmt.Println(ar)
}
}
}
Required output:
date | 2022-01-07 | 2022-01-08
-----------------------------------------------------------------------
DayOfWeek | Friday | Saturday
col1 | 1 | 20
col2 | 41 | 38
col3 | NULL | 1458