Re: Dynamic field names in recordset [message #169685 is a reply to message #169683] |
Wed, 22 September 2010 20:14 |
Robert Hairgrove
Messages: 19 Registered: September 2010
Karma:
|
Junior Member |
|
|
Pedro M. Leite wrote:
>
> On 09/22/2010 06:13 PM, Jerry Stuckle wrote:
>> On 9/22/2010 9:01 AM, Pedro M. Leite wrote:
>>> good afternoon
>>>
>>> sorry if i not make my self clear
>>> current situation
>>> one table with 50 fields - appx
>>> id - name - entrydate - remarks - width .... locked
>>> one page with :
>>> select from table where id = " - from $_GET
>>> read the recordset and output pdf
>>> rst_table['id']
>>> rst_table['name']
>>> rst_table['entrydate']
>>> ....
>>> rst_table['locked']
>>>
>>> 50 something times repeated
>>>
>>> now, i want to have a table with
>>> fieldname
>>> position
>>> so that i can :
>>> open a recordset from table with one row
>>> browse the position table, ordered by index, from 1 to 50 something
>>> in the loop, make
>>> (pseudocode) echo_to_pdf rst_table(position_table(fieldname))
>>> loop
>>>
>>> so that, to rst_table, the field i want is passed bu the content of the
>>> position_table field content, instead of literally :
>>> 'position_table(fieldname)'
>>>
>>> simple example
>>>
>>> main table
>>> id
>>> name
>>> remarks
>>>
>>> position table
>>> id,1
>>> name,2
>>> remarks,3
>>>
>>> so the output is : id - name - remarks
>>>
>>> OR
>>>
>>> position table
>>> id,1
>>> name,3
>>> remarks,2
>>>
>>> so the output is : id - remarks - name
>>>
>>> s, what i am looking to do is to reference the field by another
>>> reference and not literally
>>>
>>> thank you in advance
>>> Pedro Leite
>> What you need to do is join the tables and order by the position. For
>> more information, please follow up in comp.databases.mysql. They will
>> want the output of your CREATE TABLE statements and some sample data
>> plus exactly what you want output.
>>
>
> thanks, but that's not quite it
> my question is :
> <short version>
>
> this is correct in php
> --> $row_customers['id'];
>
> being 'id' the name of the field
>
> question
> --> can this be done ??
> ---> $row_customers[$a_variable_that_contains_'id'_or_something_else]
>
> the $a_variable .. is collected from another recordset that contains
> field names and their position, ordered by position
>
> thank you and sorry for not making myself clear
>
> Best Regards
> PLeite
This is possible. The trick is that the array representing one row which
is returned by the PHP mysql_fetch_array() function can be treated
either as an associative array or as a numerically indexed array.
For example, since you mention the scenario of a user setting up their
own preferred order in the application -- presumably using JavaScript
code or something else running on the client -- when you send off the
form data, presumably using a POST request, send along the array sort
order values as a strings (use implode() with an appropriate delimiter
and explode() them again in the page evaluating the form data). Then you
could fetch your row, i.e.:
// $aOrder[] contains the order of your fields...
// for example:
$aOrder['a'] = 1;
$aOrder['b'] = 2;
$aOrder['c'] = 0;
// ...
$sql1 = "SELECT a,b,c FROM the_table";
$res = mysql_connect(...etc. ...);
if ($res && ($q = mysql_query($sql, $res)) {
while ($row = mysql_fetch_array($q)) {
foreach ($aOrder as $o) {
$val[] = $row[$o];
}
// display the row data in $val[]...
} // fetch the next row
}
Of course, this is just one way of doing it. You could store the
ordering data in the database, but I would at least keep it independent
of the other data.
|
|
|