2011-09-30 6 views
0

사이트를 가지고 있는데, 아무 것도 변경하지 않고 수정해야하며 상태 필드가있는 mytable을 추가하면됩니다.MYsql이 조인 된 테이블과 동일한 필드를 사용합니다.

지금은이 요청

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

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

문제처럼 "표"와 "MYTABLE"둘 다 상태가이 필터도 사용했기 때문에 나는 이것에 대해 아무것도 할 수 없어 table1, table2, table3, table4, table5, table6 ... 등을 사용하는 것을 제외하고는 "정확히 똑같은"16 가지 다른 요청에 대해 필터링에만 사용되는 상태가 도움이 될 수 있습니까?

PHP에서 $ this와 비슷한 PHP 클래스이므로 FROM 필드의 테이블에 대한 참조를 알고 있으므로 FROM에 테이블을 지정하는 대신 JOIN LEFT를 사용할 수 있습니까?

+0

더 자세히 설명해 주시면 ... 어쩌면 불일치를 일으킬 수있는 다른 redudant 테이블을 추가 할 필요가 없을 것입니다. 어떤 상태에 대해 관심이 있습니까? 당신이 tabletid = 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" 내 문제를 해결하는 방법을 설명해 주시겠습니까 mytable 상태에 대해 신경 쓰지? – JohnA

+0

귀하의 질문을 이해하기 때문에, 문제는 쿼리에 관련된 여러 테이블에 '상태'필드가 있다는 것입니다. 따라서, 해당 필드 주소와 함께 테이블을 지정하십시오. 그것이 귀하의 문제가 아니라면, 귀하의 문제를 명확하게하기 위해 귀하의 질문을 다시 제안하십시오 - 다른 답변은 또한 동일한 문제를 해결합니다. –

0

당신은 "table1"."status"처럼 당신이 참조하는 테이블의 열을, 마녀을 지정할 수 있습니다

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