2011-09-30 46 views
0

我有網站我需要修改而不改變任何東西,只有這樣我才能做到這一點是通過添加mytable狀態字段。MYsql使用相同的字段作爲加入表

現在我有要求如

if...{ 
    $filter = "status = 0"; 
} 

SELECT first_name, last_name, position, wage 
FROM table1, mytable 
WHERE table1.id = mytable.id 
$filter 

問題是,無論是「表1」和「MYTABLE」有狀態和,因爲也採用了這種過濾器,我不能做任何事情這對於其他16個請求看起來「完全相似」,除了他們使用table1,table2,table3,table4,table5,table6等...以及僅用於過濾的狀態,有人可以幫忙嗎?

是在MySQL類似$這PHP類,所以它知道我參照表場域,所以我可以使用LEFT JOIN在FROM指定表的呢?

+0

如果你解釋更多...也許你不必添加其他redudant表,確實可能造成不一致......你關心哪個狀態有關?然後我你關心mytable的狀態放在哪裏table1.id = mytable.id和mytable.status = the_status_you_want – Melsi

回答

1

可以(並且可能應該爲清楚起見)前綴的表名的任何列。您可以在查詢的SELECT部分​​以及WHERE部分這樣做。例如:

SELECT 
    table1.first_name, 
    table1.last_name, 
    mytable.position, 
    mytable.wage 
FROM 
    table1, 
    mytable 
WHERE 
    table1.id = mytable.id AND 
    table1.status = "0" 

如果你將要動態地,包括表,並希望保持過濾器一般代碼,你可以使用AS關鍵字來創建別名,所以:

$use_table = 'table1'; 
$sql = ' 
    SELECT 
     filter_table.first_name, 
     filter_table.last_name, 
     mytable.position, 
     mytable.wage 
    FROM 
     '.$use_table'. AS filter_table, 
     mytable 
    WHERE 
     filter_table.id = mytable.id AND 
     filter_table.status = "0" 
'; 

..這樣,您就可以在$use_table之間切換您正在使用的表格,而無需更改任何其他SQL。

+0

你能解釋請如何table2.status =「0」 解決了我的問題? – JohnA

+0

正如我理解你的問題,問題是涉及查詢的多個表具有「狀態」字段。因此,指定該表以及發佈的字段地址。如果這不是你的問題,我建議你重新提出你的問題,讓你的問題更清楚 - 這裏的另一個答案也解決了同樣的問題。 –

0

您可以指定魔女參考表的列,例如"table1"."status"

SELECT first_name, last_name, position, wage 
FROM table1, mytable 
WHERE table1.id = mytable.id AND "table1"."status" = 0 
相關問題