2015-02-24 28 views
0

我找上查詢多個表的一些投入,多表查詢

我現在有一個包含當天的列表,(每天在那裏所做的報告。)

$list = mysql_query("SELECT * FROM list ORDER BY id"); 

while ($row = mysql_fetch_assoc($list)){ 
$drop_list[] = $row['day']; 
} 

我的最終目標是創建一個查詢,檢查每個表中的唯一行,我正在想像這樣的東西周圍的線。

foreach ($drop_list as $v) { 
$daily = mysql_query("SELECT * FROM $v WHERE ID = 1"); 
while ($row = mysql_fetch_assoc($daily)){ 
    $id  = $row['id']; 
    $name = $row['name']; 
    $age = $row['age']; 
    $day = $row['day']; 
} 
echo "<tr><td>$id</td><td>$name</td><td>$age</td><td>$day</td></tr>";  
} 

然後把它放到一個函數中,並在表格標籤之間回顯出來。

我確定代碼可以工作(尚未測試過從平板電腦輸入),但是好奇的是,如果在數組中使用foreach項查詢來自數據庫的數據並將其回顯出來,以便爲數組中的id提供日常結果?

也很好奇,如果其他有不同的方法來完成這個?

回答

0

簡短的回答

運行foreach環內的幾個SQL查詢將影響性能。有一個更好的解決方案,在一個查詢中獲取所有內容。數據庫查詢非常昂貴,應儘可能優化以減少網頁的加載時間併爲其他同時請求節省資源。您可以下載MySQL Workbench以幫助編寫查詢並使用分析器工具對其進行優化。有很多關於如何在網絡上使用這個程序的教程。

一個可能的解決方案

我假定你知道你要查詢的表和他們的名單停留很長一段時間是相同的。然後我會使用多個SELECT語句和UNION關鍵字在一個查詢中獲取所有內容。這假定不同表格中的列是相同的。通過查看代碼,他們似乎都聲明瞭所需的列。

SELECT * FROM table1 WHERE id = 1 
UNION ALL 
SELECT * FROM table2 WHERE id = 1 
UNION ALL 
SELECT * FROM table3 WHERE id = 1 

這將從每其中ID等於1。通過追加ALL關鍵字,我們從所有的表也返回保證重複的行聯合聲明中列出的表中獲取每一行。

該解決方案的一個主要缺點是我們沒有提及每行從哪個表中引用。如果需要這樣的話,一些更復雜的SQL查詢是非常必要的,但我仍然建議將這些查詢合併爲一個。

重要!

請注意,mysql_*函數已被棄用。它們不再被支持,安全漏洞也不會被修補。我強烈建議切換到PDOMySQLi分機。它們爲PHP的安全性和性能提供了更好的解決方案。

旁註

通過看你的代碼,我真的不明白,爲什麼你有幾個表中的所有聲明相同的列?這對我來說似乎是多餘的,但也許我缺乏更多的洞察力。只有一張桌子要維護會更有效。

我希望這可以幫助指導你,快樂的編碼!