MYsql使用与连接表相同的字段

时间:2011-09-30 23:04:20

标签: php mysql join

我有网站我需要修改而不改变任何东西,只有我能做到的方法是添加有状态字段的mytable。

现在我有要求

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

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

问题是“table1”和“mytable”都有状态,我对此无能为力,因为这个过滤器也用于其他16个看起来“完全相似”的请求,除了它们使用的是table1 - table2,table3,table4,table5 ,table6,...等以及仅用于过滤的状态可以有人帮忙吗?

MySQL中的类似$ this这样它知道我在FROM字段中引用表,所以我可以使用JOIN LEFT而不是在FROM中指定表吗?

2 个答案:

答案 0 :(得分: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。

答案 1 :(得分:0)

您可以指定您引用的女巫表格列,例如"table1"."status"

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