Selon Michael Stassen <[EMAIL PROTECTED]>: > Kapoor, Nishikant wrote: > > > [Sorry for cross-posting.] > > > > This is in continuation with the above mentioned subject - I am trying to > > find the 'display data order' for the returned resultset. The following > > thread very well answers my question: > > > > http://lists.mysql.com/mysql/185626 > > > > a) SET @row=0; > > b) SELECT (@row:[EMAIL PROTECTED]) AS row, ename, empno FROM emp ORDER BY > empno; > > > > +-----+--------+-------+ > > | row | ename | empno | > > +-----+--------+-------+ > > | 1 | SMITH | 7369 | > > | 2 | ALLEN | 7499 | > > | 3 | WARD | 7521 | > > | 4 | JONES | 7566 | > > | 5 | MARTIN | 7654 | > > +-----+--------+-------+ > > > > However, I am trying to use it in a perl script instead of from command > > line, and I am not sure how exactly to do it. I need to execute both > > statements a & b together ... > > You cannot execute them together. You must execute them one at a time, in > the > same connection. > > > ... or else I get > > > > +-----+--------+-------+ > > | row | ename | empno | > > +-----+--------+-------+ > > |NULL | SMITH | 7369 | > > |NULL | ALLEN | 7499 | > > |NULL | WARD | 7521 | > > |NULL | JONES | 7566 | > > |NULL | MARTIN | 7654 | > > +-----+--------+-------+ > > If you are getting this, you've made a mistake in your perl code. It's hard > to say what, though, as you haven't shown us your code. > > Hmmm. User variables are connection specific. Are you making the mistake of > opening and closing a connection for each query? That's unneccessary, and it > adds a lot of overhead. > > > How can I execute both (a) and (b) in my perl script? > > The same way you would execute any two statements, one at a time. Something > like: > > $conn->do('SET @row=0'); > my $sql = 'SELECT @row:[EMAIL PROTECTED] as row, <fields> FROM <tables> > WHERE ...'; > my $sth = $conn->prepare($sql); > $sth->execute(); > return $sth->fetchall_arrayref( {} ); > > > Thanks for any help. > > Nishi > > Mathias wrote: > > > Hi, > > You don"t need to use @row in perl, > > just use : > > > > $n=0; > > while (fetch..) { > > $n++; > > print "$n"."$ename ...\n"; > > > > } > > That would work. > > Kapoor, Nishikant wrote: > > > I could, but I am assigning the entire resultset in one shot to another > > construct as follows: > > > > my $str = "SELECT [EMAIL PROTECTED]:[EMAIL PROTECTED] as row, <fields> > FROM <tables> WHERE > ..."; > > my $sth = $conn->prepare($st); > > $sth->execute(); > > return $sth->fetchall_arrayref( {} ); > > > > Thanks, > > -Nishi > > You are returning an arrayref! One row in your results equals one row in > your > array -- in the same order! Arrays are indexed, so display data order is > already built into your array. Display position = array position + 1. Why > do > you need a redundant field in each row? > > Harald Fuchs wrote: > > > Just change the last line to > > > > my $n = 0; > > return [ map { [ ++$n, @$_ ] } @{$sth->fetchall_arrayref} ]; > > > > What's the problem? > > Are you sure? I get "Can't coerce array into hash at...". > > Mathias wrote: > > > Then alter your table to add an auto_increment column, update it and play > > your query without @row. > > > > Mathias > > No, no, no! This is what we call using a shotgun to kill a gnat. It also > doesn't yield the order of the query results. > > Michael > > -- > MySQL General Mailing List > For list archives: http://lists.mysql.com/mysql > To unsubscribe: http://lists.mysql.com/[EMAIL PROTECTED] > >
> No, no, no! This is what we call using a shotgun to kill a gnat. It also > doesn't yield the order of the query results. sure that ${$ligne[$row]}{$n}:=$n with n perl operations can be faster !:) Hope that helps :o) Mathias -- MySQL General Mailing List For list archives: http://lists.mysql.com/mysql To unsubscribe: http://lists.mysql.com/[EMAIL PROTECTED]