传递表名的一部分进行查询

时间:2013-11-12 03:14:01

标签: mysql

我有一个保存表日志的数据库 - 每个日志ID都是数字 有连接的匹配表是NAMED日志+数字logId

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

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

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

我该怎么做?

2 个答案:

答案 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)

:)