2014-10-13 6 views
0

관련 키워드 표와 일치하도록 mysql 표현식의 올바른 형식을 찾는 데 어려움을 겪고 있습니다. 다음과 같이키워드 표에 대한 MySQL 검색

테이블은 설정되어 다음과 같이

photos: id,path,various exif data 
photos_to_tags: photos_id,photos_tags_id 
photo_tags: id,name 

는 SQL은 다음과 같습니다

SELECT DISTINCT (photos.path),photos.name, 
MATCH (photo_tags.name) AGAINST('+bamboo* +flooring* ') AS relevance 
FROM photo_tags 
LEFT JOIN photos_to_tags ON photo_tags_id = photo_tags.id 
LEFT JOIN photos ON photos.id = photos_id 
WHERE (MATCH (photo_tags.name) AGAINST('+bamboo* +flooring* ' IN BOOLEAN MODE)) 
    OR photo_tags.name = 'bamboo flooring' 
GROUP BY path 
ORDER BY relevance 
LIMIT 0,24; 

그것은 반환하지 않습니다 결과 정확한 문구 "대나무 마루"는 태그가 아닌. 'bamboo'가 태그이고 'flooring'이 태그 인 경우 결과를 반환하지 않습니다.

더 자세히 설명하면 다음과 같은 문제점을 자세히 설명 할 수 있습니다. 이는 계약자의 웹 사이트를위한 것입니다. 수백장의 사진이 있습니다. 그는 루핑 사진 30 장을 가질 수 있으며 루핑 사진 중 일부는 스틸 지붕 ​​일 수도 있고 다른 것은 삼나무 셰이크, 평생 일 수도 있습니다.

키워드 태그는 별도의 테이블에 있으며 모든 사진을 나열하는 데 사용할 수 있습니다. 지붕이 있거나 강철 지붕이나 강철 지붕 등을 단층으로 분리하는 데 사용할 수 있습니다.

다른 검색어를 쓸 수있는 방법이있을 수 있습니다. 찾을 수 없었습니다. 관련 결과를 반환하는 좋은 방법입니다. 예를 들어 누군가 평생 지붕을 검색하는 경우 강철 지붕 사진을보고 싶지 않습니다.

감사합니다. 당신이 앞에 (즉, 존재해야합니다 의미) '+'쓴

네는 반환하지 않습니다 -

+0

나는 'MATCH'에 대해 아무것도 모른다. 그래서 당신을 도울 수는 없지만 왜 여기에 조인을 남겼는지 궁금하다. 내면의 조인을 원할 것 같은데? 그렇지 않으면 결과 세트에'NULL's가 많이 나타날 수 있습니다. 유용하지는 않습니다. – Brandon

답변

0

대나무 마루 "그것은 정확한 표현하지 않는 결과를 반환하지 않는 것은" "태그입니다" 둘 다. 작동 원리를 알고 싶다면 Mysql Devsite을 읽어보십시오.

다음과 같이 작성할 수도 있습니다. 'bamboo'태그가없는 사진의 경우 결과가 반환되지 않습니다.

SELECT DISTINCT (photos.path),photos.name, FROM photo_tags 
INNER JOIN photos_to_tags ON photo_tags_id = photo_tags.id INNER JOIN 
photos ONphotos.id=photos_id WHERE photo_tags.name LIKE '%bamboo%' // 'bamboo' tag should be there or the search text.. 
GROUP BY path , photos.name 
LIMIT 0,24; 
+0

흠, 링크가 끊어졌습니다. –

+0

이제 괜찮아 .. .. 그냥 텍스트를 추가 .. .. ( – Riad

+0

내가 겪고있는 문제는 바닥에 안타를 반환하는 연산자가 없다는 것이지만 반드시 대나무 바닥이 처음 반환 된 결과와 사진이어야한다고 생각합니다. 대나무 태그가 없으면 –