0

我有一个保存表日志的数据库 - 每个日志 id 都是数字 有匹配的表要加入,这些表是 NAMED 日志 + 数字 logId

我需要能够根据将要传递的日志 ID 加入这些表

例如:SELECT * from ACTIVITIES a INNER JOIN (LOG + LogID) l2 ON a.activityID = l2.activityID

'logID' 将作为参数传递所以如果 logID 为 100 我正在寻找表 log100

我怎样才能做到这一点?

4

2 回答 2

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 的表分区功能。您也许可以避免拥有如此多的日志表,而只需将它们视为整个表中的单独分区。

于 2013-11-12T03:21:56.847 回答
0

您必须使用动态 sql 语句才能对动态表执行查询。

将日志 ID 作为参数,创建一个接受一个参数的存储过程:

创建过程 usp_GetTableLogs @logID int

作为

声明 @select varchar(2000)

SET @select = 'SELECT * from ACTIVITIES a INNER JOIN LOG' + @logID + 'l2 ON a.activityID = l2.activityID'

执行 (@select)

:)

于 2013-11-12T03:34:10.543 回答