portlight
asked on
how to pass dynamic name of table into query
I have a database that keeps a table logs - each log id will be numeric
There are matching tables to join on that are NAMED log + the numeric logId
I need to be able to join these tables based on a log id that will be passed
ex:
SELECT * from ACTIVITIES a
INNER JOIN (LOG + LogID) l2 ON a.activityID = l2.activityID
The 'logID' will be passed as a paramater
SO if logID is 100 I am looking for table log100
How can I do this?
There are matching tables to join on that are NAMED log + the numeric logId
I need to be able to join these tables based on a log id that will be passed
ex:
SELECT * from ACTIVITIES a
INNER JOIN (LOG + LogID) l2 ON a.activityID = l2.activityID
The 'logID' will be passed as a paramater
SO if logID is 100 I am looking for table log100
How can I do this?
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Just put this code to a stored procedure and make @LogID a parameter of this stored procedure. Then, just call the procedure
Are you using a scripting language such as PHP?
ASKER
I have not ever done a stored proc like this before. However this database design is already in place and I need to work with it as is.
Here is the basic stored procedure. I need to add this inner join to this stored proc....If someone can help me by showing me this would look after added I would appreciate it.
Here is the basic stored procedure. I need to add this inner join to this stored proc....If someone can help me by showing me this would look after added I would appreciate it.
CREATE PROCEDURE reportNameTest (
IN groupId varchar (50),
IN logId varchar (50),
IN fromDate varchar (50),
IN toDate varchar (50))
BEGIN
DECLARE logInS varchar (50);
DECLARE groupIdS varchar (50);
DECLARE startDate varchar (50);
DECLARE endDate varchar (50);
SET logInS = CASE logId WHEN '-1' THEN '%' ELSE logId END;
SET groupIdS = CASE groupId WHEN '-1' THEN '%' ELSE groupId END;
SET startDate = FROM_UNIXTIME(fromDate/1000);
SET endDate = FROM_UNIXTIME(toDate/1000);
SELECT g.groupId,g.name AS groupName,l.logId,l.name AS logName, i.itemID,
i.name AS itemName, le.userName,completed, i.optimalMin,i.optimalMax ,le.value,
u.name AS unitDescription,
g1.parentId AS parentId1, g1.name AS group1Name,g2.parentId AS parentId2, g2.name AS group2Name,
g3.parentId AS parentId3, g3.name AS group3Name,i.ordering
FROM logExceptions le
INNER JOIN logs l ON l.logID = le.logID
INNER JOIN groups g ON g.groupId = l.groupId
INNER JOIN items i ON le.itemId = i.itemId
LEFT JOIN units u ON i.unitId = u.unitId
LEFT JOIN groups g1 ON g.parentId = g1.groupId
LEFT JOIN groups g2 ON g1.parentId = g2.groupId
LEFT JOIN groups g3 ON g2.parentId = g3.groupId
WHERE l.logID LIKE logInS
AND g.groupID LIKE groupIdS
AND le.completed
BETWEEN startDate
AND endDate;
END //
DELIMITER ;
ASKER
I have gone back to the drawing board with this query.
New query
To call I am using
What I want the end results to be is
New query
USE vorpaldev;
DELIMITER $$
DROP PROCEDURE IF EXISTS vorpaldev.searchLogId2$$
CREATE DEFINER = 'root'@'%'
PROCEDURE vorpaldev.searchLogId2 (userId varchar(300))
BEGIN
SET userId = CONCAT("log", userId);
SET @statment = "Select *
from @userId
";
PREPARE stmt FROM @statment;
SET @a = userId;
EXECUTE stmt USING @a;
DEALLOCATE PREPARE stmt;
END
$$
DELIMITER ;
To call I am using
CALL searchLogId2 (131)
What I want the end results to be is
Select * from log131
Are you using a scripting language such as PHP?
ASKER
no using straight mySql query
ASKER