2015-02-24 1 views
0

Предположим, у меня есть простая таблица базы данных, у которой нет ID_KEY, но есть столбец имен. Я хочу, чтобы отобразить результат, как этотПользовательский ввод Perl и MySQL для выбора строки?

+----+---------+ 
| | name | 
+----+---------+ 
| 1 | dog  | 
| 2 | cat  | 
| 3 | penguin | 
| 4 | lax  | 
| 5 | whale | 
| 6 | ostrich | 
+----+---------+ 

Тогда есть <STDIN> для, как, скажем, 3, чтобы выбрать пингвина. 3 - это номер строки, который появляется, когда вы выполняете вызов выбора.

Есть ли способ сделать это, или это возможно только с ассоциированным ключом id, а затем с последующим предложением выбора, соответствующим этому ключу id?

+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; 
+0

Спасибо, это то, что я искал. У вас нет достаточной репутации, чтобы вы могли выпустить вас, извините. –

0

Вариант 1 - Вы бы поставили поле id в БД, если хотите найти целое число 3, потому что строка 3 не всегда будет пингвином из SQL-запроса.

Вариант 2 - Дамп данных и массив или хэш и используйте индекс, чтобы найти элемент из с в переменной, а не БД, когда 3 зафиксировано из STIN.

0

Просто используйте запрос:

my $select = $dbh->prepare(' 
SET @id:=0; 
SELECT name, 
     @id = @id+1 
FROM table 
'); 
Смежные вопросы