2011-05-19 90 views
2

選擇,我有我的查詢設置其他一天,所以從多個表與MySQL

$query = "SELECT card_id,title,description,meta_description,seo_keywords,price 
FROM cards,card_cheapest order by card_id"; 

正如你所看到的,我是從表cards選擇card_id,title,description,meta_description,seo_keywords,並且價格從cheapest_card到來。他們都有共同的card_id(在這兩個表中)。但是,我遇到了一些問題。當我在navicat lite中運行查詢時,我收到一個錯誤"card_id is ambiguous"。我做錯了什麼?

+0

你想加入表格嗎? – phoxis 2011-05-19 13:28:33

+0

錯誤說2個表具有相同的列名稱,DB沒有標識要採用哪一個,因此您需要名稱中每個表的別名並使用該別名來引用特定列以檢索它。 – gmhk 2011-05-19 13:51:44

回答

4

當2個或多個表中有一列名稱相同的列時,您必須限定您希望該列來自的表。

即:

$query = "SELECT cards.card_id,title,description,meta_description,seo_keywords,price 
FROM cards,card_cheapest order by card_id"; 

此外,你真的要運行的查詢這種方式,沒有一個WHERE/JOIN子句來定義如何加入兩個表?

$query = "SELECT cards.card_id,title,description,meta_description,seo_keywords,price 
FROM cards,card_cheapest WHERE cards.card_id = card_cheapest.card_id 
ORDER BY card_id"; 
1

當你在你從選擇兩個表相同的列名,你必須與表名稱的前綴在SELECT的部分(這並不重要,如果是相同的數據)

SELECT cards.card_id, ...

編輯:然而,cularis的答案是比我更說明,並注意一下如果你想獲得正確的結果連接兩個列card_id的。

0

當您運行查詢從具有共享字段名稱的多個表中獲取信息時,您需要指定從哪個表中提取哪個字段。您可以通過在字段名稱前面指定表名來完成此操作。

你的情況,你有兩個選擇:

cards.card_id或card_cheapest.card_id。

此外,我同意@cularis,你可能更好的做一個加入,但你仍然需要指定你想選擇哪個card_id:card或card_cheapest。

+0

謝謝大家。我仍然不太瞭解JOIN,這就是爲什麼我沒有使用它。但我很感激幫助! – 2011-05-19 14:13:01