On Wednesday 30 November 2005 18:11, Alex Gemmell wrote: > [EMAIL PROTECTED] wrote: > > Alex Gemmell <[EMAIL PROTECTED]> wrote on 11/30/2005 10:06:09 AM: > >>Hi, > >> > >>Unfortunately I need to use a query on an old MySQL (4.0.xx) and the one > >> > >> > >>I currently have uses a subquery. So it works on my 4.1 but not with > >>this 4.0. I have read in the MySQL manual that I can rewrite subqueries > >> > >> > >>using joins but I don't see how with this query because I only have one > >>table to check. > >> > >>Basically all I'm doing is pulling out the most recent 10 activities > >>stored in a table, then reversing the order so it appears oldest first, > >>to newest (note the "$row['Assignment_ID']" is just a PHP variable): > >> > >>SELECT * FROM > >>(SELECT * FROM tblactivities > >> WHERE Assignment_ID=$row['Assignment_ID'] > >> ORDER BY Date DESC LIMIT 10) AS tblTemp > >>ORDER BY Date ASC > >> > >>This works perfectly on 4.1. How can I rewrite this to get the same > >>effect without using a subquery and so allow it to work on 4.0? > >> > >>Any help gratefully recieved! > >> > >>Alex > > > > To make this work on 4.0, you have to do manually something the engine > > did for you implicitly: create a temporary table. > > > > CREATE TEMPORARY TABLE tmpSubquery SELECT * > > FROM tblactivites > > WHERE Assignment_ID=$row['Assignment_ID'] > > ORDER BY Date DESC LIMIT 10; > > > > SELECT * from tmpSubquery ORDER BY Date ASC; > > > > DROP TEMPORARY TABLE tmpSubquery; > > > > > > There are only two things to remember to make this work. > > 1) All of these statements must be on the same, continuously connected > > connection. You cannot close the connection between the > > statements. > > 2) If you do not drop the temp table and you try to execute this set of > > commands on the same continuous connection, you will get an error. > > > > Shawn Green > > Database Administrator > > Unimin Corporation - Spruce Pine > > Thanks Shawn but I couldn't seem to get this to work. > > I made the point of checking the MySQL User that PHP connects with. I > gave it CREATE and DROP privilages on the database schema in question. > It previously only had SELECT privilages. > > Here's my PHP code to show you how I tried it: > > [PHP] > $query = "CREATE TEMPORARY TABLE tmpSubquery > SELECT * FROM tblactivities > WHERE Assignment_ID='".$row['Assignment_ID']."' > ORDER BY Date DESC LIMIT 10; > SELECT * FROM tmpSubquery ORDER BY Date ASC; > DROP TEMPORARY TABLE tmpSubquery;"; > > $result_activities = mysql_query($query); > [/PHP] > > I tried splitting up the queries to see if it helped but it didn't work > either: > > [PHP] > $query1 = "CREATE TEMPORARY TABLE tmpSubquery > SELECT * FROM tblactivities > WHERE Assignment_ID='".$row['Assignment_ID']."' > ORDER BY Date DESC LIMIT 10;"; > mysql_query($query1); > > query2 = "SELECT * FROM tmpSubquery ORDER BY Date ASC;"; > $result_activities = mysql_query($query2); > > query3 = "DROP TEMPORARY TABLE tmpSubquery;"; > mysql_query($query3); > [/PHP] > > Perhaps I am missing something obvious here? I hope you or anyone else > can offer some more help. > > Alex
Hi Alex, a ";" after the tmpSubquery above would be nice...:-) -Stathis -- MySQL General Mailing List For list archives: http://lists.mysql.com/mysql To unsubscribe: http://lists.mysql.com/[EMAIL PROTECTED]