我面临一个小问题。我目前正在开发一个需要在 MySQL 中使用动态表名的应用程序。
基本上,我有一个基于多种因素(类型、播放长度、发行日期等)从数据库中选择专辑的过程——这个过程的一部分允许用户创建一堆自定义过滤器。
自定义过滤器向用户返回该选择条件内所有专辑的计数。然后将这些专辑的 ID 存储在一个带有随机生成的哈希/序列号的表中(例如,albumSelect_20880f9c05d68a)
我这样做是因为我不想在一个字段中存储一个巨大的逗号分隔列表(真的很傻)——而且我不喜欢将一组值发送到我的 HTML 中的隐藏字段,因为这只会增加数据吞吐量(一次可能是数千行)
在 CodeIgniter 中,我使用查询绑定来生成我的 SQL 查询,如下所示:
select * from artists where artistName = ? AND albumTitle = ?
当我参数化查询时,查询会自动转义
$query = $this->db->query($sql,array("Singer","Album"));
现在是棘手的部分
如果我将查询编写为如下所示:
$sql = "select albumid from albums where albumid in (select albumid from albumSelect_?)";
$this->db->query($sql,array('20880f9c05d68a'));
结果查询变为:
select `albumid` from `albums` where `albumid` in (select `albumid` from `albumSelect_'20880f9c05d68a'`)
完全正确,但显然查询无效..
编辑:更多信息
查询可能是更大查询的一部分,具体取决于用户选择的条件。例如
$sql = "select albumid from albums where albumid in(select albumid from tags where tag = ?) AND albumid in(select albumid from albumSelect_?)";
我只是想知道是否有办法让这个工作,或者是否有人可以提出更好的选择。表名的连接显然不是一个选项。
提前致谢!
戴夫