簡體   English   中英

為什么查詢返回的結果是列而不是行?

[英]Why is my query returning results in column instead of rows?

有一個有效的SQL語句:

my $q_it = $dbh->prepare("SELECT customdata.Field_ID,
    customdata.Record_ID,
    customdata.StringValue
    FROM customdata
    WHERE customdata.Field_ID='10012' && (StringValue LIKE '1%' OR StringValue LIKE   '2%' OR StringValue LIKE '9%');
   ");

我為客戶端編寫了一個非常簡單的Perl腳本,以便在其服務器/數據庫上運行。 我無法直接對其進行測試,但是我將代碼傳遞給了他們的DBA:

  $q_it->execute();
   open (MYFILE, '>>data.txt');
    while (my @row=$q_it->fetchrow_array)
    {
       print MYFILE $row[0].$row[1].$row[2];
    }
   close (MYFILE);

$ q_it只是普通的SQL Select語句。 我假設data.txt將包含許多記錄(行)。 但是,令人驚訝的是,它在單個列中返回結果,但是卻有許多行,例如:

      100012
      100012
       ...
      100012
      315941
      315667
       ...
      315633 
      2011-06
      2011-06
       ...
      2011-06

大約有正確的編號。 “ 100012”,“ 31”值和日期字符串的行數。 理想情況下,應該

100012  315941 2011-06
100012  315667 2011-06
100012  315633 2011-06

難道是我在Perl中做錯了什么,還是因為他們的MySQL數據庫具有不同的結構?

謝謝您的幫助!

我猜您正在查看以前的轉儲數據庫嘗試。 要獲取第一列的所有值,然后獲取第二列的所有值,等等,需要與所顯示的程序完全不同的程序。

不要忘記您正在打開文件append ,這會將所有舊數據保留在文件的開頭。 我本來以為可以進行開放寫操作 ,因為失敗嘗試的輸出幾乎沒有價值。

我還要檢查的狀態open使用

open MYFILE, '>', 'data.txt' or die $!;

除此之外,除非您將$\\設置$\\換行符,否則需要用換行符終止打印輸出以分隔記錄。 寫起來也比較容易

print "@row\n";

而不是明確提及每個字段。

我真的很喜歡使用這樣的東西:

sub fetch_result_rows {
    my ($dbh, $sql, @bind_params) = @_; 
    try {
        return $dbh->selectall_arrayref($sql, { RaiseError => 1, Slice => {}, }, @bind_params);
    } catch {
        confess("Unable to run SQL:\n$sql\nBIND PARAMS: @{[ join(', ', @bind_params) ]}");
    }   
}

魔術存在於Slice中,這使得返回值以哈希引用的arrayref形式返回。 對我來說,性能開銷是值得的,因為結果如下所示:

[
{ column1 => value, column2 => value, column3 => value }, # row1
{ column1 => value, column2 => value, column3 => value }, # row2
...

]

在perldoc DBI中閱讀以獲取更多信息

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM