2012-03-13 37 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