2012-05-12 25 views
1

我有一個查詢SELECT但爲了通過數據在另一個表

$STH_1 = $DBH_R->query("SELECT table_name       
         FROM information_schema.tables       
         WHERE table_name       
         LIKE 'v_c_ei\_9%' 
         "); 

$stmts_1 = array(); 

while (($row_1 = $STH_1 -> fetch_assoc()) !== null){ 
$table_name = $row_1['table_name']; 

這個查詢的結果來控制是,通常,表中順序列表:

v_c_ei_9001 
v_c_ei_9002 
........... 
v_c_ei_9030 

在另一表,v_c_country,我有2列:table_namecountry_name, (因爲例如,v_ei_c_9001Australiav_ei_c_9012Great Britain等)

一般來說,結果是,我需要從上面的查詢中得到表格(表格名稱)的列表,但是在表格v_c_country的國家名稱的ORDER ASC中。

如何更改查詢?

回答

1
SELECT t.table_name       
    FROM information_schema.tables AS t 
    JOIN v_c_country    AS c ON t.table_name = c.table_name 
WHERE t.table_name LIKE 'v_c_ei\_9%' 
ORDER BY c.country_name ASC; 

對於測試和驗證,請將c.country_name添加到選擇列表中。

0

你不知道。 MySQL中的規則是,您絕不能混合使用數據(例如存儲在表格中的國家名稱)和元數據(例如表格名稱)。

您可以做的是使用存儲過程將語句準備工作濫用爲動態SQL。這在很多時候都在這裏描述過。

+0

thnks,但我從來沒有發現任何問題如何比較元數據(table_name)和數據(table_name) – Andrew

+0

這是主要觀點:你不能比動態SQL的任何其他方式比較數據和元數據 –

+0

我想你我錯過了這一點。表名僅僅是數據;應用程序將按順序獲取名稱,並可能使用這些名稱動態生成適當的SQL。你是對的,你不能選擇表名並在單個查詢中選擇這些名稱(這可能是混合元數據和數據),但查詢只需要表名(在這種情況下查看時的數據)在一個特定的序列。 –

相關問題