基于外键表列值的Mysql结果

时间:2014-01-01 06:15:37

标签: php mysql

我正在开发一个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'

我希望有人可以对它进行排序

1 个答案:

答案 0 :(得分:0)

尝试此查询

select a.title 
from Articles a 
join MainTable m on 
a.UID=m.UID 
where m.can_see='1';