Est-il possible d'obtenir une ligne avec tous les noms de colonnes d'un tableau comme celui-ci ?
|id|foo|bar|age|street|address|
Je n'aime pas utiliser Pragma table_info(bla)
.
Est-il possible d'obtenir une ligne avec tous les noms de colonnes d'un tableau comme celui-ci ?
|id|foo|bar|age|street|address|
Je n'aime pas utiliser Pragma table_info(bla)
.
Utilisez une requête récursive. Étant donné
create table t (a int, b int, c int);
Cours :
with recursive
a (cid, name) as (select cid, name from pragma_table_info('t')),
b (cid, name) as (
select cid, '|' || name || '|' from a where cid = 0
union all
select a.cid, b.name || a.name || '|' from a join b on a.cid = b.cid + 1
)
select name
from b
order by cid desc
limit 1;
Sinon, il suffit d'utiliser group_concat
:
select '|' || group_concat(name, '|') || '|' from pragma_table_info('t')
Les deux donnent des résultats :
|a|b|c|
Le jeu de résultats d'une requête en PHP offre quelques fonctions permettant de faire cela :
numCols()
columnName(int $column_number )
Exemple
$db = new SQLIte3('mysqlite.db');
$table = 'mytable';
$tableCol = getColName($db, $table);
for ($i=0; $i<count($tableCol); $i++){
echo "Column $i = ".$tableCol[$i]."\n";
}
function getColName($db, $table){
$qry = "SELECT * FROM $table LIMIT 1";
$result = $db->query($qry);
$nCols = $result->numCols();
for ($i = 0; $i < $ncols; $i++) {
$colName[$i] = $result->columnName($i);
}
return $colName;
}
En utilisant la réponse de @Tarkus, voici les regex que j'ai utilisés dans R :
getColNames <- function(conn, tableName) {
x <- dbGetQuery( conn, paste0("SELECT sql FROM sqlite_master WHERE tbl_name = '",tableName,"' AND type = 'table'") )[1,1]
x <- str_split(x,"\\n")[[1]][-1]
x <- sub("[()]","",x)
res <- gsub( '"',"",str_extract( x[1], '".+"' ) )
x <- x[-1]
x <- x[-length(x)]
res <- c( res, gsub( "\\t", "", str_extract( x, "\\t[0-9a-zA-Z_]+" ) ) )
res
}
Le code est quelque peu bâclé, mais il semble fonctionner.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.