You must be able to run it as a single call, or as a single TRANSACTION? What do you mean by "single call"? One PHP command? One command on the commandline? one script run?
-Sheeri On 4/4/06, Ed Reed <[EMAIL PROTECTED]> wrote: > Thanks for the quick reply Peter. Unfortunately, this is all legacy stuff > that I have to make work together and the problemreport table does not > reference the employeeid in the employees table. It was all create about ten > years ago and the data has just always been migrated to the db du jour. I'm > currently using MySQL 4.1x but most importantly I must be able to run the > entire query in a single call. > > Thanks for the help. > > >>> Peter Brawley <[EMAIL PROTECTED]> 4/4/06 2:35:49 PM >>> > > Ed, > > The big slowdown in your query is likely the join on > > ProblemReports.Responsible = CONCAT(Employees.FirstName, ' > ',Employees.LastName)) > > Eek. Does the employees table not have a primary key, and does the > problemreports table not reference that key? If not, I would think a first > priority would be to fix that. > > Meanwhile, you can simplify your monster query by writing the user's problem > priorities to a temp table, then doing a simple pivot on priority to generate > your sentence. Something like ... > > DROP TEMPORARY TABLE IF EXISTS ProbSum; > CREATE TEMPORARY TABLE ProbSum > SELECT Priority > FROM ProblemReports, Employees > WHERE ProblemReports.Status='Open' > AND ProblemReports.Responsible=CONCAT(Employees.FirstName, ' > ',Employees.LastName) > AND Employees.DateTerminated IS NULL > AND Employees.UserName='User1' > > SELECT COUNT(*) INTO @n FROM ProbSum; > > SELECT > IF( @n = 0, > '', > CONCAT( 'You have', > @n, > 'Problem Report', > IF(@n=1,'','s'), > ': Priorities(High=', > SUM(IF(Priority='High',1,0)), > ',Med=', > SUM(IF(Priority='Med',1,0)), > ',Low=', > SUM(IF(Priority='Low' ,1,0)), > ')' > ) > ) > FROM probsum; > > DROP TEMPORARY TABLE probsum; > > All this would be easier in a stored procedure, if you have MySql 5. > > PB > > ----- > > Ed Reed wrote: > Can someone help me simplify this query please? It's meant to return a single > string result that looks something like this, "You have 12 open Problem > Reports: Priorities(High=5, Med=6, Low=1)" The relavent columns from the two > tables are Table: ProblemReportsFields: PRNo, Status, Priority, Responsible > Table: EmployeesFields: Firstname, Lastname, DateTerminated, UserName Here's > the query Select IF((@a:=(SELECT Count(PRNo) From ProblemReports, Employees > WHERE (ProblemReports.Status='Open') AND > (ProblemReports.Responsible=ConCat(Employees.FirstName, ' > ',Employees.LastName)) AND (Employees.DateTerminated Is Null) AND > (Employees.UserName='User1')))>0, If (@a=1, ConCat('You have one open > Problem Report: Prioritiy = ', (Select Priority From ProblemReports, > Employees WHERE (ProblemReports.Status='Open') AND > (ProblemReports.Responsible=ConCat(Employees.FirstName, ' > ',Employees.LastName)) AND (Employees.DateTerminated Is Null) AND > (Employees.UserName='User1'))), Concat('You have ', @a, ' open Problem > Reports: Priorities(', (Select ConCat('High=',Count(Priority)) From > ProblemReports, Employees WHERE (ProblemReports.Status='Open') AND > (ProblemReports.Responsible=ConCat(Employees.FirstName, ' > ',Employees.LastName)) AND (Employees.DateTerminated Is Null) AND > (Employees.UserName='User1') And (Priority='High')),', ',(Select > ConCat('Med=',Count(Priority)) From ProblemReports, Employees WHERE > (ProblemReports.Status='Open') AND > (ProblemReports.Responsible=ConCat(Employees.FirstName, ' > ',Employees.LastName)) AND (Employees.DateTerminated Is Null) AND > (Employees.UserName='User1') And (Priority='Med')),', ',(Select > ConCat('Low=',Count(Priority)) From ProblemReports, Employees WHERE > (ProblemReports.Status='Open') AND > (ProblemReports.Responsible=ConCat(Employees.FirstName, ' > ',Employees.LastName)) AND (Employees.DateTerminated Is Null) AND > (Employees.UserName='User1') And (Priority='Low')),')')),''); No virus found > in this incoming message.Checked by AVG Free Edition.Version: 7.1.385 / Virus > Database: 268.3.5/300 - Release Date: 4/3/2006 > > -- MySQL General Mailing List For list archives: http://lists.mysql.com/mysql To unsubscribe: http://lists.mysql.com/[EMAIL PROTECTED]