2013-02-09 2 views
2

을 반환 :내가이 SQL 쿼리가 NULL 열

products_id | dodavatelia_id ... 
2153   | 67    ... 
: 나는 MySQL 클라이언트 (명령 행 또는 Navicat는) 그것을 실행하면

SELECT * 
FROM products p, products_description pd, products_to_categories c left 
    join products_sex ps on (c.products_id = ps.products_id), 
    categories cc 
WHERE p.products_id = pd.products_id 
     and p.products_id = c.products_id 
     and cc.categories_id = c.categories_id 
     and p.products_status = 1 
     and p.products_price >= 15.8333333333 
     and p.products_price <= 40 
     and p.products_quantity > 0 
     and (ps.products_sex = "U" or ps.products_sex is null) 
     and (c.categories_id = 77 or cc.parent_id = 77) 
ORDER BY products_sort_order, p.products_date_added desc, pd.products_name ASC 
LIMIT 0, 40 

을,이 결과를 얻을 수 내가 (는 mysql_query와 mysql_fetch_assoc와) PHP 스크립트에 의해 제품을 얻을 경우

, 나는 얻을 :

array ( 
    'products_id' => NULL, 
    'dodavatelia_id' => '67', 
    ... 
); 

products_id가 왜 NULL이됩니까?

답변

2

같은 이름을 가진 열을 포함 여러 테이블을 조인하고 있기 때문에이 될 수도, 여기 products_id은 그래서 당신은 NULL 수 있습니다이 이름의 마지막 열의 값을 검색 할 수 있습니다.

당신은 검색하려는 당신은 열 별칭을 넣어해야

:

SELECT p.products_id AS pPropId, p.* FROM products p, ... 

이 그런 다음 PHP 결과에서이처럼 열을 액세스 할 수 있습니다

$result['pPropId'] 

더 많은 정보를 SQL 별칭에 기능 here.

편집 : 명령 줄에서 작동하는 이유는 무엇입니까?

SQL 쿼리가 올바르게 작동하고 각products_id열을 반환합니다. 문제는 결과에 따라 연관 배열을 반환하는 mysql_fetch_assoc()을 사용한다는 것입니다. 그리고 배열의 동일한 키에 대해 여러 값을 가질 수 없습니다.

내부적으로 수행 할 수있는 작업은 $result['products_id'] = p.products_id으로 설정되지만 이전 값을 지우는 동일한 이름의 다음 열에 대해서도 동일하게 적용됩니다. 이 문제가없는 mysql_fetch_row()을 사용할 수 있습니다.

좋은 연습은 단지 SELECT *이 아닌 SELECT에서 검색하고자하는 열을 나열하는 것입니다. 그런 다음 동일한 이름의 두 열에 다른 별칭이 필요하다는 것이 논리적이됩니다.

+0

고맙습니다. 하지만 이해가 안 돼요, 왜 그것이 mysql 커맨드 라인에서 동작하고 PHP에서는 그렇지 않습니다. – yetty

+1

@yetty> SQL 쿼리가 제대로 작동하기 때문입니다. 업데이트 된 답변 확인 – koopajah