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]