我正在开发一个php-mysql库作为我的学习项目,我可以拥有许多表,但可以根据维护的值控制子表行
我有两个mysql表
Create Table MainTable(
UID int(10) NOT NULL AUTO_INCREMENT PRIMARYKEY,
can_see int(1)
);
Create Table Articles(
UID int(10),
title varcha(100)
FOREIGN KEY (`UID`) REFERENCES `MainTable` (`UID`)
);
UID在MainTable和Article Table中很常见。只有当MainTable中的'can_see'设置为'1'时,我才会看到一篇文章。
这是我的php代码
getTableData($table, $selection = '*', $condition = FALSE) {
if($condition)
$condition = 'where '.$condition;
mysql_query("select $selection from $table $condition");
// AFTER THIS SOME CODE TO LOOP AND RETURN THE DATA
}
我能够获取数据,但问题是我只想在“MainTable”中启用“文章UID”时获取数据
我知道我必须使用连接和表别名,但这是一个动态查询,所以我卡住了。我有一个丑陋的解决方案
select $selection from $table where UID in (
select UID from MainTable where UID in (
select UID from $table $condition
)
)
我做了基准测试,与表连接相比,它花费了两倍的时间,但我无法弄清楚如何为连接构建动态查询。如果我们手动构建它,联接查询看起来很简单
select a.title from Articles a, MainTable m where a.UID=m.UID AND m.can_see='1'
我希望有人可以对它进行排序
答案 0 :(得分:0)
尝试此查询
select a.title
from Articles a
join MainTable m on
a.UID=m.UID
where m.can_see='1';