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