我有一个保存表日志的数据库 - 每个日志ID都是数字 有连接的匹配表是NAMED日志+数字logId
我需要能够根据将要传递的日志ID加入这些表
例如: SELECT *来自ACTIVITIES a INNER JOIN(LOG + LogID)l2 ON a.activityID = l2.activityID
'logID'将作为参数传递 所以如果logID是100我正在寻找表log100
我该怎么做?
答案 0 :(得分:1)
SQL要求在将查询传递给prepare()
之前修复表名。您不能将参数用于表名。不是表名的一部分,也不是整个表名。
因此,您必须在应用程序代码的变量中形成表名,然后在SQL查询中使用该变量。
示例(伪代码,如PHP):
$logid = 100;
$tablename = "log{$logid}";
$sql = "SELECT * from ACTIVITIES a INNER JOIN `{$tablename}` l2 ON a.activityID = l2.activityID";
$stmt = $dbh->prepare($sql);
我建议您查看MySQL的table partitioning功能。您可以避免拥有这么多日志表,只需将它们视为一个整个表中的单个分区。
答案 1 :(得分:0)
您必须使用动态sql语句才能在动态表上执行查询。
以日志ID作为参数,创建一个接受一个参数的存储过程:
创建程序usp_GetTableLogs @logID int
作为
DECLARE @select varchar(2000)
SET @select ='SELECT * from ACTIVITIES a INNER JOIN LOG'+ @ logID +'l2 ON a.activityID = l2.activityID'
执行(@select)
:)