Re: Reordering results for a report - Mailing list pgsql-general
From | scott.marlowe |
---|---|
Subject | Re: Reordering results for a report |
Date | |
Msg-id | Pine.LNX.4.33.0312121331320.18667-100000@css120.ihs.com Whole thread Raw |
In response to | Reordering results for a report (Nathaniel Price <nprice@tesseract.net>) |
Responses |
Re: Reordering results for a report
Re: [PHP] Reordering results for a report |
List | pgsql-general |
First, I'm crossposting this to pgsql-php, please remove the pgsql-general header when next someone responds. OK, here's how ya do it. something like this: First, after you run a select, you can use pg_field_name to iterate over the list of fields you're getting back. I.e. if your select was something like: select a1/a2 as div, a1+a2 as sum, a1-a2 as diff, a1, a2 from table; you could use this: $count = pg_num_fields($res); if (isset($flds)) unset($flds); for ($i=0;$i<$count;$i++){ $flds[]=pg_field_name($res,$i); } Now, when you're printing out the headers for each row, just make the link have something like: print "<url goes here...>?orderby=".$flds[$i]."moreurlstuffhere???"; Then, if the orderby is set when you build your query, just append it: if (isset($orderby)){ $query.= "order by ".$orderby" } Add some directional control: if (isset($dir)){ if ($dir=="down") $query.=" DESC"; } There's more you can do, but does that kinda get the idea across? sorry if it's not real detailed. On Fri, 12 Dec 2003, Nathaniel Price wrote: > I'm new to this list, so I'm not sure if this is the right place to post > this. If not, please direct me to where it would be better to post it. > > Anyway, I'm creating a report generation tool of sorts in PHP for a > database. As part of this report generation tool, I'd like to allow the > user to reorder these results arbitrarily. In other words: > > id | offer > ---+------------ > 1 | Offer 1 > 2 | Offer 2 > 3 | Offer 3 > > could become > > id | offer > ---+------------ > 3 | Offer 3 > 1 | Offer 1 > 2 | Offer 2 > > However, I don't see any way of reordering the results arbitrarily, > short of creating a table that maps the id numbers to an arbitrary sort > order, joining them and doing an ORDER BY on the sort order numbers, > like so: > > id | offer | sort > ---+-----------+------ > 3 | Offer 3 | 1 > 1 | Offer 1 | 2 > 2 | Offer 2 | 3 > > The problems that I have with this solution are > --The sort order would be unique for anybody who uses the system, in > other words, one user may sort one way, and another user another way, > and perhaps simultaneously. I could fix this by using an additional > session identifier in the sort table, but that leads me to the next > problem... > --I'd have to garbage collect this data everytime I'm finished with it, > and since it's likely to only be used once for the actual report > generation and then discarded, it seems like a waste of effort. > > So is there a way to make a query where I can sort arbitrarily without > having to create additional data in the database? > > Thanks for your attention. > >
pgsql-general by date: