1. did my code work?




2. It appears that you have to reset the mysql_fetch_*(), not reset the
$myrow. Try calling:

    mysql_data_seek($result_it, 0)

before

    while ($myrow = mysql_fetch_assoc($result))

It would appear that it resets the $result_it for a call to
mysql_fetch_row().  I would assume that it would also work for
mysql_fetch_array() and mysql_fetch_assoc()

Worth a try.


Justin



on 29/08/02 4:16 PM, Petre Agenbag ([EMAIL PROTECTED]) wrote:

> Hi Justin
> OK, a quick feedback on your previous suggestion:
> 
> I tried to unset the $myrow_it, but it still didn't produce any output.
> The only way I could get it to work was with the same method you
> suggested in this e-mail.
> I had to create 2 new vars ( which basically boils down to 2 more
> SQL's).
> 
> I think I'm not 100% understanding what the $result variable contains
> $sql = 'select * from table';
> $result = mysql_query($sql);
> 
> As I would think, $result contains the entire table in some sort of
> "structure" or matrix right?
> And doing a
> while ($myrow = mysql_fetch_assoc($result))
> 
> creates a one dimensional array of each row in the table with each pass.
> I was just looking for a way to step through $result again and again,
> without having to query the DB again...
> But the only way I can get it to work is to do:
> $result2 = mysql_query($sql);
> $result3 = mysql_query($sql);
> 
> and then I can
> 
> while ($myrow = mysql_fetch_assoc($result2))
> 
> 
> and later 
> 
> while ($myrow = mysql_fetch_assoc($result3))
> 
> It's like the contents of $result can only be used once...Is that the
> case?
> 
> I tried to do 
> $test = $result; immediately after doing the query and then using $test
> in the while , but that doesn't work either...
> 
> Anyway, not a train smash, will carry on with the trusty old ways.
> 
> 
> 
> 
> 
> On Wed, 2002-08-28 at 18:30, Justin French wrote:
>> Hi,
>> 
>> I haven't got a heap of time tonight, but you should really look at arrays.
>> What I noticed with your code was that you basically did the same thing
>> (same layout and presentation three times -- and it might be 50 times
>> later!!).
>> 
>> This sort of thing cries out for an array or function -- or both!!
>> 
>> Let's start by recognising your 3 loops: OPEN, CURRENT, OLD.  Arrays come in
>> many shapes, but generally a one-dimensional array is in the form of 'key'
>> => 'value'.  In this case, I've chosen to use the three types of status as
>> the key, and the natural language or heading as the value.
>> 
>> <?
>> $ticketTypes = array(
>> 'OPEN' => 'New Tickets',
>> 'CURRENT => 'Current Tickets',
>> 'OLD' => 'Old Tickets'
>> );
>> ?>
>> 
>> Then you can loop through this array with a foreach, and do the same thing
>> to all three elements.
>> 
>> Now, we have to take the $type (key) and $heading (value) of each array
>> element (the three options) and use them within the loop to produce the
>> different results.
>> 
>> <?
>> 
>> // array of ticket types
>> $ticketTypes = array(
>> 'OPEN' => 'New Tickets',
>> 'CURRENT => 'Current Tickets',
>> 'OLD' => 'Old Tickets'
>> );
>> 
>> 
>> foreach($ticketTypes as $type => $heading)
>> {
>> // print heading
>> echo "<B>{$heading}</B><BR>";
>> 
>> $sql = "SELECT * FROM tickets WHERE status='{$type}'";
>> $result = mysql_query($sql);
>> if(!$result) 
>> {
>> echo "There was a database error: " . mysql_error() . "<BR>";
>> }
>> else
>> {
>> // no need to to do an $i++ count... just use this:
>> $total = mysql_num_rows($result);
>> while ($myrow = mysql_fetch_array($result))
>> {
>> // a little trick i have to make each column
>> // name (eg "status") into it's own var (eg $status)
>> foreach($myrow as $k => $v) { $$k = $v; }
>> echo "{$company} :: {$title} :: {$content}<br>";
>> }
>> echo "Total New: {$total}<br>";
>> }
>> }
>> ?>
>> 
>> 
>> Now, I haven't tested the above, so gimmie a yell if it breaks...
>> 
>> When I strip all the bullshit and comments out, and condense the script down
>> to it rawest form, it's like 19 lines of code -- that's including error
>> handling and all sorts of stuff!!  And it will work for 2 ticket types
>> (still less lines of code than your 40+) and for 50 ticket types -- just
>> make the array bigger.
>> 
>> The other point is, if this script was called for many different pages, then
>> you could include it all in a function... but that's for another day!
>> 
>> 
>> Sure, you're doing three sql queries, but each one of them is returning a
>> more focused result set... I'd have to do some tests, but I reckon there's
>> very little difference between ONE QUERY + MASSIVE AMOUNTS OF PHP CODING
>> if() sections etc etc, versus THREE QUERIES + SOME CODING.  The nature of
>> what you want to achieve with this script is conducive to using three
>> separate queries.
>> 
>> I know less queries == faster, but it's not always the case, and not always
>> worth worrying about, unless you've got a HUGE site with millions of hits a
>> day... you just won't notice the benefit, in comparison to the advantage.
>> 
>> 
>> Some pages on a site I'm working on right now, hinge.net.au, have 5-10
>> queries on them, for sessions, users, content, data, counters, logging,
>> message boards, etc etc.  And I've NEVER noticed a performance problem, or
>> got any complaints.
>> 
>> 
>> When you've got maybe 500 rows in there (or 5,000, or 50,000), it'd be nice
>> to run an a/b test with a script timer, and get some averages to find out
>> definitively.
>> 
>> 
>> Enjoy,
>> 
>> Justin
>> 
>> 
>> 
>> on 28/08/02 11:16 PM, Petre Agenbag ([EMAIL PROTECTED]) wrote:
>> 
>>> Justin, 
>>> Thanks for the reply.
>>> I frequently see your comments on threads here, and don't worry, I
>>> wouldn't take any as insults as I can see you want to help, and I
>>> appreciate that!
>>> 
>>> So, you are more than welcome to show me alternatives, I am by no means
>>> an ace programmer, and I eagerly lap up all comments and suggestions.
>>> 
>>> I will try the suggestion, and will report back.
>>> 
>>> Just to sort of explain my thinking process.
>>> I would think that limiting queries to a db to the absolute minimum
>>> would be the "best", BUT, I can now see that there are no easy way, as
>>> the IF iterations clearly show...
>>> 
>>> I would me very interested in your suggestions as to "cleaning" up the
>>> code, for I have seen plenty of examples where you can write the same
>>> functionality in many many different ways, and the only difference is
>>> normally in the way people think about the problem and the solution.
>>> It can't be taught,and will only come with experience, which I can
>>> hopefully get a head start on with this list...
>>> 
>>> Thanks alot.
>>> 
>>> On Wed, 2002-08-28 at 14:52, Justin French wrote:
>>>> Try unset($myrow_it).
>>>> 
>>>> You don't want to reset the array, you want to clear it, then use a new
>>>> array (with the same name, and the same $result) for another while loop.
>>>> 
>>>> FWIW, I'm pretty sure I'd just use three distinct queries.  Infact, it'd be
>>>> worth you timing your scripts with both these versions to see what works
>>>> out
>>>> quicker -- three queries, or lots of if() statements [remember, you're in a
>>>> while loop, so 5000 rows * 3 if statements = 15000!!]
>>>> 
>>>> Put this at the top:
>>>> 
>>>> <?
>>>> $show_timer = 1;
>>>> function getmicrotime()
>>>> { 
>>>> list($usec, $sec) = explode(" ",microtime());
>>>> return ((float)$usec + (float)$sec);
>>>> } 
>>>> $time_start = getmicrotime();
>>>> ?>
>>>> 
>>>> And this at the end:
>>>> 
>>>> <?
>>>> if($show_timer)
>>>> {
>>>> $time_end = getmicrotime();
>>>> $timer = $time_end - $time_start;
>>>> echo "Timer: {$timer}<BR>";
>>>> }
>>>> ?>
>>>> 
>>>> Run the script with both versions about 10 times each, and take the average
>>>> :)
>>>> 
>>>> 
>>>> There are many many ways I can see that you could clean up and optimise the
>>>> script you've shown (not intended as an insult AT ALL!) -- quite possibly
>>>> some of these would make more of a difference to your performance than
>>>> limiting yourself to just one query... at the very least, it would make
>>>> updating the script easier, and reduce the lines of code.
>>>> 
>>>> 
>>>> Good luck,
>>>> 
>>>> Justin French
>>>> 
>>>> 
>>> 
>> 
> 


-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to