【问题标题】:MYsql use same field as joined tableMYsql 使用与连接表相同的字段
【发布时间】:2011-11-28 20:05:05
【问题描述】:

我有一个网站需要修改而不做任何更改,唯一的方法是添加具有状态字段的 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 的 php 类,所以它知道我在 FROM 字段中引用了表,所以我可以使用 JOIN LEFT 而不是在 FROM 中指定表?

【问题讨论】:

  • 如果您解释得更多...也许您不必添加其他确实会造成不一致的冗余表...您关心哪个状态??我你关心 mytable 状态然后把 table1.id=mytable.id 和 mytable.status=the_status_you_want 放在哪里

标签: php mysql join


【解决方案1】:

你可以指定你引用的女巫表的列,比如"table1"."status"

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

【讨论】:

    【解决方案2】:

    您可以(并且可能应该,为清楚起见)为其表名作为任何列的前缀。您可以在查询的 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。

    【讨论】:

    • 您能解释一下 table2.status = "0" 是如何解决我的问题的吗?
    • 据我了解您的问题,问题是查询中涉及的多个表都有一个status 字段。因此,指定表格和字段可以解决该问题。如果这不是您的问题,我建议您重新提出您的问题以使您的问题更清楚 - 这里的另一个答案也解决了同样的问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-26
    • 1970-01-01
    相关资源
    最近更新 更多