2011-08-01 3 views
0

나는 여러 사용자가 있습니다. 나는 각 사용자가 자신의 항목을 검색 할 수 있어야하고 다른 사람의 항목은 볼 수 없도록해야합니다. 이 쿼리는 여전히 executer가 dbase의 모든 항목을 볼 수있게합니다. 도와주세요!mysql이 일치하지만 사용자 이름으로 필터링해야합니다.

$ findit는 스크립트에서 이전에 사용자가 찾고있는 변수입니다. $ username은 로그인 한 후 세션 쿠키를 통해 설정됩니다.

$result = mysql_query("SELECT * FROM prices WHERE 
      itemnum LIKE '%$findit%' || 
      itemdesc LIKE '%$findit%' AND username = '$username' ORDER BY price"); 
+0

알아두기 || 대신 OR를 사용해야합니다. SQL에서. – Ariel

+1

AND는 SQL을 포함한 대부분의 언어에서 OR보다 우선 순위가 높습니다. 편집 : 나는 명확하지 않다. 나는 동일한 "predecence priority/order"를 의미했습니다 – gbn

+1

@gbn 아니요, 아래 링크 된 차트를 참조하십시오. (또는 여기 다시 : http://dev.mysql.com/doc/refman/5.0/en/operator-precedence.html) – Shi

답변

2

당신은 그룹에 수 있어야 OR : 사용자 이름이 일치 할 필요가되도록

SELECT * 
FROM prices 
WHERE (itemnum LIKE '%$findit%' 
    OR itemdesc LIKE '%$findit%') 
    AND username = '$username' 
ORDER BY price 

어느 하나의 조건, 다른 같은 이름의 일치로 또는 행위를 할 것입니다 .

+1

는 약속 한대로 작동한다. 감사!!! – Brad

0
$result = mysql_query("SELECT * FROM prices WHERE 
     (itemnum LIKE '%$findit%' OR itemdesc LIKE '%$findit%') 
     AND username = '$username' ORDER BY price"); 

괄호에 주목하십시오. 그렇지 않은가있는 경우에는 괄호가 누락 중 하나 itemnum LIKE ...또는itemdesc LIKE ... and username = ...

0
$result = mysql_query("SELECT * FROM prices WHERE 
     (itemnum LIKE '%$findit%' || 
     itemdesc LIKE '%$findit%') AND username = '$username' ORDER BY price"); 

일치하는 것입니다. AND의 경우 operator precedenceOR보다 높습니다.

관련 문제