2011-12-05 67 views
1

我有一個關鍵字搜索,使用UNION ALL在多個數據庫表中搜索縮略圖圖像。我有兩個頁面,results.php和view.php。我的目標是能夠單擊results.php上的縮略圖圖像,並將其導向到view.php上同一圖像的更大版本。問題是我所有表格中的每個圖像都使用字段名稱「id」,所以當我點擊results.php上的縮略圖時,我從不同的表格中獲得了具有相同ID的兩張不同圖像。我試着將id改爲不同的名字,但是當傳遞url參數的時候,我只能選擇1個值。 (如果你可以選擇超過1我不知道如何)。所以我的問題是爲什麼我的身份證從不同的表被分組在一起,我該如何改變這一點?SQL問題 - 多個MySQL表中的相同字段名稱?

圖片搜尋結果網頁(其中工程完美):

SELECT * 
    FROM table1 
    WHERE keyword LIKE %colname% OR id LIKE %colname% 
    UNION ALL 
    SELECT * 
    FROM table2 
    WHERE keyword LIKE %colname% OR id LIKE %colname% 

查看圖像頁面(這裏有問題):

SELECT * 
FROM table1 
WHERE id = colname 
UNION ALL 
FROM table2 
WHERE id = colname 
+1

需要注意的是,如果您需要所有列,則使用'*'命名所有列不是好的做法__even__。:) – Nonym

回答

0

你需要命名空間的表字段名稱:

SELECT * FROM table1 WHERE table1.id = colname UNION ALL FROM table2 WHERE table2.id = colname 
0

將派生字段添加到兩個子查詢中,以便您可以確定該特定行來自哪個表:

SELECT 'table1' AS source, * 
FROM table1 
... 
UNION ALL 
SELECT 'table2' AS source, * 
FROM table2 

然後讓您的代碼檢查新的「源」字段,以便稍後在顯示該圖像時指向相應的數據庫表。當然,如果兩個表具有相同的結構,這就引出了爲什麼你不只是將它們合併成一個表並在這個新的「全局」表中添加這個「源」字段的問題,從而節省了麻煩必須運行兩個查詢來獲取圖像數據。

0

不要忘記你可以使用AS關鍵字別名字段和表

SELECT * 
FROM table1 as t1 
WHERE t1.keyword LIKE %colname% OR t1.id LIKE %colname% 
UNION ALL 
SELECT * 
FROM table2 as t2 
WHERE t2.keyword LIKE %colname% OR t2.id LIKE %colname% 
+0

我猜我們都得到-1,因爲我們回答了通用問題,而不是咆哮關於設計缺陷;非常適合爲其他人提供答案/價值以瀏覽問題/答案,或者可能卡在ELSE的不良表格設計中,因此不允許他們改變。 –

0
SELECT *, 1 as table_reference 
FROM table1 
WHERE id = colname 
UNION ALL 
select *,2 
FROM table2 
WHERE id = colname 
0

你的ID是不是由MySQL的組合在一起。這只是你要求數據庫結果作爲關聯php數組,列名作爲數組鍵。你不能有重複的數組鍵,所以你只能得到其中的一個值。

如果您不需要知道表的名稱,只需獲取數字索引數組而不是關聯數組。如果你需要的表名,要麼修改SQL別名的列,也可以使用更多的自動化方法 SQL Select * from multiple tables

0

1)如果所有的表具有相同的結構,

其巨大的設計缺陷

你應該把它們合併到一張表中。 2)如果你的表是不同的,你只需要顯示一個圖像 - 在視圖頁面上使用union有什麼意義?如果它只是一張桌子上的一張圖片 - 您爲什麼要查詢兩張桌子?

相關問題