假设我有一个简单的数据库表,它没有ID_KEY但有一个名称列。我想像这样显示输出
+----+---------+
| | name |
+----+---------+
| 1 | dog |
| 2 | cat |
| 3 | penguin |
| 4 | lax |
| 5 | whale |
| 6 | ostrich |
+----+---------+
然后有一个<STDIN>
喜欢,比方说3选择企鹅。 3只是您执行选择呼叫时显示的行号。
有没有办法做到这一点,或者它是否只能与id关联,然后是与该id键匹配的后续select语句?
答案 0 :(得分:1)
我一开始误解了你,但我已经接受了。但它没有多大意义,因为当您在Perl程序中输入数字时,您将无法使用MySQL命令行工具,并且无法使用看看要输入的数字..
您需要做的是编写Perl程序,以便打印表中的所有name
字段以及行号。然后,您的程序可以从输入动物编号转换为其名称,因为它知道它打印的内容。
这样的事情会起作用。当然,您必须正确设置名称,IP地址和凭据,以便DBI
可以连接到数据库。
use strict;
use warnings;
use DBI;
my $dbh = DBI->connect(
'DBI:mysql:database=animal_test',
'username',
'password',
{ RaiseError => 1 },
);
my $names = map @$_, $dbh->selectall_arrayref('SELECT name FROM animals');
for my $i ( 0 .. $#$names ) {
printf "%3d: %s\n", $i+1, $names->[$i];
}
print "\n";
print "Enter animal number: ";
my $animal = <>;
chomp $animal;
my $name = $names->[$animal-1];
printf "Animal chosen is %s\n", $name;
答案 1 :(得分:0)
选项1 - 如果你想通过整数3找到,你会在数据库中放入一个id字段,因为第3行并不总是来自SQL查询的企鹅。
选项2 - 将数据转储到数组或散列中,并使用索引来查找变量中的项目,而不是从STIN中捕获3时的数据库。
答案 2 :(得分:0)
只需使用查询:
my $select = $dbh->prepare('
SET @id:=0;
SELECT name,
@id = @id+1
FROM table
');