2011-10-04 3 views
0

내 제목이 내가 원하는 것을 설명하지 못할 수도 있습니다. 이것은 가게를 위해 제품을 가져 오기위한 현재 쿼리입니다 :mysql query - 다른 테이블의 id = id와 그 테이블의 필드 = 값을 선택하십시오.

mysql_query("SELECT * FROM Items 
      WHERE ((Items.menu_id='$menu_id' AND Items.status='1') 
        $colour_sql) 
      $order_sql 
      LIMIT $lim_from,$limit_per_page"); 

는 $의 colour_sql 내가 말한다 뭔가를해야만 갖고 싶어 말한다 부분 : 색상은 별도의 테이블에있는과 함께, 분홍색

AND (Items.id=colour.product_id AND colour.colour='pink') 

따라서 만 표시 제품. 나는 해답을 찾았지만 어쩌면 그 이유를 설명하는 사람을 찾을 수없는 것 같습니다. 왜냐하면 저는 제가 무엇인지 정확히 모르기 때문에 어떤 도움을 주셔서 감사합니다.

+0

mysql join을 사용해야합니다. – Robot

답변

2

당신은 가입 또는 부속 중 하나를 수행해야합니다.

당신은 쿼리에 색상 표를 추가 할 필요가

$menu_id = mysql_real_escape_string($menu_id); 
mysql_query = "SELECT i.* 
    FROM items i 
    WHERE i.menu_id = '$menu_id' 
    AND i.status = '1' 
    AND i.id IN (SELECT c.product_id FROM colour c WHERE c.colour = 'pink') 
    ORDER BY ..... 
    LIMIT {intval($limit_per_page)} OFFSET {intval($lim_from)} "; 
1

아마도 내부 조인입니까? 당신이 테이블 colour에 가입하려는 경우

[...] 
FROM Items 
INNER JOIN colour 
ON colour.id = Items.colour_id 
WHERE [blablabla] 
AND colour.colour = 'pink' 
+0

고마운 친구, 그 긴 하루가되었습니다 :) 작품 – Zephni

+0

당신을 환영합니다! (어서, 그냥 화요일에 ....) – Dippi

0

$menu_id = mysql_real_escape_string($menu_id); 
mysql_query = "SELECT i.* 
    FROM items i 
    INNER JOIN colour c ON (c.product_id = i.id) 
    WHERE i.menu_id = '$menu_id' 
    AND i.status = '1' 
    AND c.colour = 'pink' 
    ORDER BY ..... 
    LIMIT {intval($limit_per_page)} OFFSET {intval($lim_from)} "; 

부속 가입 :

FROM Items,colour 

또는

From Items INNER JOIN colour ON Items.id = colour.product_id 

그러나 색상 표에 product_id가 있음을 확인했습니다. 색상 표를 추가하는 Items 테이블에서 역상을 사용하지 않는 이유는 무엇입니까?

+0

제품은 하나 이상의 색상을 가질 수 있습니다. 그래서 당신이 정확히 이해한다면 그것을 할 수 없었습니다. 그냥 – Zephni

+0

그냥 관찰이었습니다. :) – denil

관련 문제