2012-03-13 33 views
2

我已经使用了很多表的通用MySQL的声明,只是检索所有数据单个表:如何在MySQL查询返回,而不是参考一些相关领域

$table = "profiles";//set static for example 
$result = mysql_query("SELECT * FROM `$table`"); 

我想结果显示来自position的文本代替job_id。 如果我仍然希望我的查询保持通用,并且可能有多个字段引用其他表,而我希望相关文本不是id,那么我该如何执行此操作?

mysql> show columns from profiles; 
+-------------+--------------+------+-----+---------+----------------+ 
| Field  | Type   | Null | Key | Default | Extra   | 
+-------------+--------------+------+-----+---------+----------------+ 
| staff_id | int(11)  | NO | PRI | NULL | auto_increment | 
| job_id  | int(11)  | NO |  | NULL |    | 
| name  | varchar(100) | NO |  | NULL |    | 
+-------------+--------------+------+-----+---------+----------------+ 

mysql> show columns from job_positions 
+-------------+--------------+------+-----+---------+----------------+ 
| Field  | Type   | Null | Key | Default | Extra   | 
+-------------+--------------+------+-----+---------+----------------+ 
| job_id  | int(11)  | NO | PRI | NULL | auto_increment | 
| position | varchar(100) | NO |  | NULL |    | 
+-------------+--------------+------+-----+---------+----------------+ 

是否有某种关系,我可以对这些字段设置,然后发出与该查询返回相关的文本,而不是ID的命令?

+0

听起来像是你想有一个良好的** PHP ORM图书馆**:HTTP://计算器。 com/questions/108699/good-php-orm-library – 2012-03-13 00:12:23

回答

1

您可以创建一个视图:

create or replace view info as 
select p.job_id as job_id, p.name as name, j.position as position 
from profile as p, job_position as j where p.job_id=j.job_id 

然后你可以仍然使用您的查询

$table = "info"; 
$result = mysql_query("SELECT * FROM `$table`"); 
+0

这看起来很有希望,但是没有视图的桌子呢?有没有办法检查表上的一个视图,如果是这样的话,运行$ table = $ tablename查询。“_ view”否则$ table = $ tablename? – Craig 2012-03-13 00:37:46

+0

通用mysql语句的要点在于$ table是从用户动作自动分配的,例如他们单击配置文件按钮,以便将$ profile指定为“配置文件”。我无法将其更改为'people_view',因为这会破坏程序中的其他内容。因此,我需要在运行SQL之前对其进行更改。因此如果我调用了我创建'profile_view'的视图,我可以使用$ table。'_ view',但是使用这个泛型语句的其他查询将失败,因为没有为它们创建视图,因此没有$ table。'_ view' – Craig 2012-03-13 01:30:04