MYsql использует то же поле, что и объединенная таблица - PullRequest
0 голосов
/ 01 октября 2011

У меня есть сайт, который мне нужно изменить, ничего не меняя, и единственный способ, которым я могу это сделать, - добавить 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?

Ответы [ 2 ]

1 голос
/ 01 октября 2011

Вы можете (и, вероятно, должны, для ясности) префикс любого столбца с именем таблицы.Вы можете сделать это как в части запроса 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 голосов
/ 01 октября 2011

Вы можете указать столбец таблицы, на который вы ссылаетесь, например "table1"."status":

SELECT first_name, last_name, position, wage 
FROM table1, mytable
WHERE table1.id = mytable.id AND "table1"."status" = 0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...