2010-08-26 87 views
8

我的數據庫中有很多表都具有相同的結構。我想從所有表,而不必一一列舉,像這樣選擇:從所有表中選擇

SELECT name FROM table1,table2,table3,table4 

我試過,但這個不起作用:

SELECT name FROM * 

有沒有辦法選擇的所有表數據庫沒有列出查詢中的每個表?

+0

您可能需要做一個聯合 - 你可以調整下面的解決方案來創建一個動態的sql語句,就像'從table1 union select *中選擇*從表2 union ..' – 2010-08-26 05:48:37

+0

對不起,但這聽起來像一個真的糟糕的應用程序設計。如果你有相同結構的表,你應該考慮把你的數據放在一張表中! – 2010-08-26 07:03:24

回答

0

聽起來就像你想將每個表聯合在一起,所以你得到的結果就好像它們是一張大桌子一樣。你需要寫出來的查詢完全一樣

SELECT * FROM table1 UNION SELECT * FROM table2 UNION ... SELECT * FROM tableN 

複製粘貼&可以在這裏你的朋友。

我很好奇爲什麼你有很多不同的表具有相同的結構?

+0

我正在上一個在線文件瀏覽器,每個目錄都有自己的表格「文件/圖片/,文件/視頻/,文件/音樂/」等等每個表中的記錄都是文件的詳細大小名稱說明等等。最初我將所有文件列在一張表中。但我有超過5000個記錄和查詢速度慢,所以現在每次添加目錄時會自動創建表格,每次上傳文件時自動存儲記錄,現在我要爲用戶創建搜索功能,並且我想要搜索所有目錄或表格 – dlaurent86 2010-08-26 04:08:59

+6

'每個目錄都有自己的表格'OMG – 2010-08-26 05:47:05

+2

當您的查詢速度較慢且有5000條記錄時,您可以隨時做一些索引或重新組織表格結構。爲每個目錄創建一個表比與具有適當索引和設計的單個表更相關的性能問題。 – DrColossos 2010-08-26 05:47:07

1

據我所知,沒有這樣的通配符可以從所有表中選擇。我會建議寫一個view,然後調用view而不是(它會節省您每次寫出名稱) - VoodooChild

1

我找到了一個解決方案,但我仍然想知道是否有更簡單的方法或解決方案更好

但這裏是我想出了:

$tables = mysql_query("show tables"); 
$string = ''; 
while ($table_data = mysql_fetch_row($tables)){ 
    $string.=$table_data[0].','; 
} 
$ALL_TABLES = substr($string,0,strlen($string)-1); 
$sql="SELECT name FROM $ALL_TABLES "; 
+0

我仍然認爲你想將每個表聯合在一起,因爲在FROM子句中指定「table1,table2,table3」等意味着你想*聯接*表(不同於順序追加它們),並且不通過包括加入的任何標準意味着您將獲得笛卡爾產品。 – sasfrog 2010-08-26 05:14:51

+2

我不推薦這種方法,但我有一個提示給你:http://www.php.net/implode – 2010-08-26 05:51:07

+0

是的好吧,我整晚都試圖得到這個權利。和我的解決方案沒有工作的原因,當我試圖運行 「SELECT名字從$ ALL_TABLES」 得到這個錯誤「MySQL的錯誤:#1052 - 列‘身份證’在字段列表不明確」 ,所以我最終作出一個搜索表格中的所有文件,我只是在這個表格上進行全文搜索 – dlaurent86 2010-08-26 06:26:52

1

這意味着你不應該有很多具有相同結構的表都沒有。
但只是一個表中有一個字段來區分不同類型的數據,無論它是什麼。

然後選擇所有將沒有問題。

5

i am working on a online file browser, each directory has its own table

這是由於某種原因很無用的:當你擁有約200文件(這種情況是真實的,是嗎?)你有大約200臺。如果每個目錄中有大約1000個文件等等。在某個時間,如果從數據庫中進行選擇,則要麼需要購買更多的服務器資源。

我想你應該改變你的數據庫結構:從加入parent_folder_id列到表剛剛開始,在這之後,你可以把你所有的行(文件和目錄 - 因爲目錄是文件太多 - 在這裏你可以添加type列確定這一點)到一個表中。

+0

最後,一個人對整體解決方案提出質疑。 – 2010-08-26 07:02:11

相關問題