使用Perl + MySQL(DBI)仅获取列中的列名和项数

时间:2014-09-15 01:59:15

标签: mysql sql perl dbi

我使用LAMP(Linux,Apache,MySQL,Perl)。使用CPAN中的DBI模块。

我试图同时获取COLUMN_NAME和COUNT,并将它们存储到Perl Hash中。

这样我就可以用HTML打印这样的内容:

Album: Selfies; #Column_Name
Photos: 0; #Count

为此,我想我需要一个for / foreach循环来打印哈希的密钥和相应值,一次设置一个。我看到了基础知识。甚至成功编写了2个单独的SQL语句,但我正在寻找一种更有效的方法。此外,还有一些问题:

一个。第一个Column_Name / Count集合显示为空,尽管休息很好。像这样的东西。

Album: 
Photos:

Album: First
Photos: 2

B中。在计数为0的情况下,它再次返回空白行,类似于:

Album: First_album
Photos: 

℃。要解决这两个问题,我尝试grep / ^ $ / ..但结果是这样的:

Album: 1
Photos: 1

此刻相当困难。我的问题是:

如果有一个组合的SQL语句来获取COLUMN_NAME AND COUNT。我知道如何准备单独的声明,但我希望有一种方法可以将它简化为一个声明。

第二个问题,我认为我做错的部分是提取COLUMN_NAME

$rv = $sth->fetchrow_array; #I think this is the wrong way maybe. 

我通过查看DBI文档尝试了其他的事情,但到目前为止,还没有弄清楚如何克服上面的前两个问题。


MySQL数据库的示例结构:

DB:测试 表:firsttable

专栏:Selfies,Panaroma Selfies包含3个值,Panaroma包含5个值。

我想使用DBI / Perl提取此信息并以下列方式显示它:

Album: Selfies
Photos: 3

Album: Panaroma
Photos: 5

Sql语句

SELECT COUNT(column_name) FROM table_name;
SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'table_name'

1 个答案:

答案 0 :(得分:1)

如果我理解你在做什么,这就是查询:

SELECT "Selfies" AS Album, COUNT(DISTINCT Selfies) AS Photos
FROM table_name
UNION
SELECT "Panorama" AS Album, COUNT(DISTINCT Panorama) AS Photos
FROM table_name

获取结果并循环输出。