如何获取表的第二个寄存器的第五个字段?

时间:2012-02-07 17:07:10

标签: mysql

我有自动生成的SQL数据库

我不知道字段的名称,我不知道字段的价值;我只知道我需要获得哪个寄存器的数量以及该寄存器的字段数。

例如,如果我需要获取数据库表“Table1”的第二个寄存器的第五个字段,我应该执行哪个SQL查询? / p>

4 个答案:

答案 0 :(得分:1)

数据库中表中的行正式无序,但它们当然按某种顺序存储。 SQL中没有办法按位置引用表中的列;你必须知道专栏的名称。

由于您知道表名,因此可以询问系统目录以了解表中的列,从而了解表中的第二列名称(假设它不是单列表)。

但是,如果您不知道表的架构,则无法以查询数据的方式执行任何有意义的操作。您必须知道列的含义才能知道查询将要执行的操作。

显然,您可以在表上运行一些查询(一旦知道了之后的列名),然后收集两行数据;第二行是你要追求的那一行。

...

如果您的数据库访问语言返回带有数组中每行的值的行,那么您可以使用半作用 - 如Perl with DBI,PHP或...

SELECT * FROM Table1;

这将收集所有数据(包括第5列,假设有很多列),并且您的fetch操作可能会将*表示的值返回到数组中,然后您可以查看在第二行数组的第五个元素中的值,以查看数据。在许多SQL DBMS中(我不特别了解MySQL),您甚至可以使用过时的表示法来排序第五列:

SELECT * FROM Table1 ORDER BY 5;

这里的5指的是结果集中的第五列,假设这是从单个表中选择所有列,则表示该表的第五列。

然而,从长远来看,这样盲目是一个荒谬的命题。您必须了解架构及其解释才能合理使用数据库。

答案 1 :(得分:1)

你可以尝试:

SELECT *
FROM information_schema.COLUMNS 
WHERE information_schema.COLUMNS.TABLE_SCHEMA = '<DATABASENAME>' 
AND information_schema.COLUMNS.TABLE_NAME = '<TABLENAME>' 
ORDER BY information_schema.COLUMNS.ORDINAL_POSITION ASC

这将为您提供表元数据,包括列名和类型。

答案 2 :(得分:0)

你不能通过PHP(或你的选择)来做到这一点:

$i=1;
while($row = mysql_fetch_row($res))
{
if ($i == 2)
{
   echo $row[4];
}

$i++;
}

答案 3 :(得分:0)

据推测您可以访问数据库? 你不能这样做:

SHOW CREATE TABLE Table1;

返回列的顺序应该为您提供可以在查询中使用的字段的名称。