2014-03-25 2 views
0

"pictures", "pictag"및 "tagging"이라는 3 개의 테이블이 있습니다. 사용자가 검색하려는 이미지의 이름을 입력하는 검색 상자가 있습니다. 이 용어에 사용자가 입력 할 때 이름, 설명 및 이미지를 말하고 싶습니다.SQL 쿼리 검색 도움말

예를 들어, 사용자가 'sun'으로 이미지에 "태그 지정"하면이 이미지가 표시되지 않습니다. 많은 일을 시도했지만 내 코드에서이 문제를 막을 수 있다고 생각합니다. "태그"를 검색 할 때 이미지를 표시하지 않고 실행하려고하는 것과 같이 어떤 종류의 쿼리를 사용할 수 있습니까?

쿼리는 다음과 같습니다

$sql = " 
    SELECT pictures.idpic, pictures.name, pictures.info, pictag.tagpicID, pictag.pictagName, tagging.IDimage, tagging.tagpicID 
    FROM pictures, pictag, tagging 
    WHERE pictures.idpic = '$searchvalueentered ' 
    AND pictag.tagpicID= '$searchvalueentered ' 
    AND tagging.tagpicID= '$searchvalueentered '"; 
+0

where 조건에서 AND 대신 OR을 사용해보십시오. 한 가지 더, 귀하의 쿼리에 따라 입력 검색 단어가 데이터베이스 값과 일치해야합니다. 나는 이것이 바람직하다고 생각하지 않는다. "="대신 LIKE를 사용하십시오 .... – Kishore

+0

HI .. 3 개의 테이블 사이의 관계는 어디에 있습니까? 그 문제를 살펴보십시오. – Kishore

+0

먼저 JOIN – Strawberry

답변

0

내가 확실히 당신이 무엇을하고 있는지 이해하지 않고 세 개의 테이블에 대한 있지만 사용 "또는"귀하의 WHERE 절에 대신 "AND"하려고 무엇을 . 나는 그 문제가 거기에 있다는 직감을 가지고있다.

0

시도해보십시오.

$sql = " 
    SELECT pictures.idpic, pictures.name, pictures.info, pictag.tagpicID, pictag.pictagName, tagging.IDimage, tagging.tagpicID 
    FROM pictures, pictag, tagging 
    WHERE pictures.idpic = '" . $searchvalueentered . "' 
    OR pictag.tagpicID = '" . $searchvalueentered . "' 
    OR tagging.tagpicID = '" . $searchvalueentered . "' 
"; 

그런데 준비된 문장을 사용해보십시오. 이것은 매우 안전하지 않습니다.

+0

을 참조하십시오. 도움을 준 Hector에게 감사합니다. 그러나 "태그가있는 이름"을 검색 할 때 이미지가 화면에 표시되지 않습니다. 경고 : mysql_fetch_array()는 C : \ xampp \ htdocs \에 주어진 boolean 값을 가진 매개 변수 1을 리소스로 기대하고 있습니다. pictures \ testingsearch.php on line 45 나는이 오류가 whileloop 때문이라고 생각한다. $ result = mysql_query ($ sql); while ($ row = mysql_fetch_array ($ result)) { } – user3457677

0

실제로 작동하지만 실제로 테이블에 가입하고 싶으면 결과에 중복 레코드가 나타납니다 (어쩌면 이것이 원하는 것일 수 있습니다).

그 pictag 및 태그를 가정입니다 1 :

SELECT pictures.idpic, pictures.name, pictures.info, pictag.tagpicID, pictag.pictagName, tagging.IDimage, tagging.tagpicID 
FROM pictures 
LEFT JOIN pictag ON pictures.idpic = pictag.tagpicID 
LEFT JOIN tagging ON pictures.idpic = tagging.tagpicID 
WHERE pictures.idpic = '$searchvalueentered'; 

내가 당신을 위해 쿼리를 테스트 할 수 없습니다하지만이 의지를 의심 : 사진 테이블, 내가 대신이 방법을 시도 할 촉구 1 개 관계 모든 테이블이 "idpic"키와 관련되어 있으면 예상 결과를 생성합니다.

+0

테이블에 관계가없는 것일 수 있습니다. 테이블이 다른 출처의 이미지를 저장하고 OP에서 원하는 이미지를 저장하는 경우 해당 필드에서 이름을 검색하면 결합이 필요하지 않습니다. –

+0

@ David, 제안 David에 감사드립니다. 그러나 나는 sql 코드로 가본 적이있다. 이미지는 "태그가 붙은 이름"이 검색 될 때 여전히 화면에 표시되지 않는다.경고 : mysql_fetch_array()는 매개 변수 1이 C : \ xampp \ htdocs \에 주어진 부울 값일 것으로 기대합니다. pictures \ testingsearch.php on line 45이 오류는 whileloop 때문에 발생한다고 생각합니다 : $ result = mysql_query ($ sql); while ($ row = mysql_fetch_array ($ result)) {} – user3457677

+0

아, PHP에 대해 꽤 많이 알고 있습니다. 저는 PEAR MDB2 나 Laravel을 사용하고 싶지만 너무 자주 네이티브 메소드를 사용하지 않습니다. 조회를 확인하거나 논리 처리에 오류 처리를 추가 할 수 있습니다. 예를 들어 -'$ result = mysql_query ($ sql) 또는 die (mysql_error()); while ($ row = mysql_fetch_array ($ result)) {- 기타 등등. mysql_query는 에러시 false를 반환한다. –

0

다윗이 언급 한 바와 같이, 당신은 ... 당신이 시도 할 수

SELECT 
    pictures.idpic, 
    pictures.name, 
    pictures.info, 
    pictag.tagpicID, 
    pictag.pictagName, 
    tagging.IDimage, 
    tagging.tagpicID 
FROM pictures 
INNER JOIN pictag 
    ON pictures.idpic = pictag.tagpicID 
INNER JOIN tagging 
    ON pictures.idpic = tagging.tagpicID 
WHERE 
    CONCAT_WS(' ',pictures.idpic,pictag.tagpicID,tagging.tagpicID) LIKE %$searchvalueentered% 

참고 중복을 제거하고 검색을 단순화하기 위해 테이블을 조인 시도해야하지 매우 최적화 된 솔루션을.