2012-05-23 3 views
3

오늘 나와 저의 동료가 오랫동안 토론 해 온 매우 복잡한 문제가 있습니다. 답변을 얻지 못한 것처럼 보입니다. 여기에 우리가 놓친 밝은 생각이 있습니다.mysql 문자열을 쉼표로 구분하여 %를 하나의 결과로 만드셨습니까? %

$tags=mysql_real_escape_string($_GET["tags"]); 
$tags="SELECT * FROM i WHERE tip LIKE '%".$tags; 
$tags=str_replace(",","%' OR tip LIKE '%",$tags); 
$tags=$tags."%'"; 
$qtags = mysql_query($tags) or die(mysql_error()); 

예 : $ 태그 = '단어, 구문, 단어, foo는, 바, 아무것도'

태그 'I'에 저장 단락 (과 비교하여 다음 사용자에 의해 작성되고 단락에서 가져온 있습니다 SQL 데이터베이스).

우리가 직면 한 문제는 결과를 초래 한 '태그'(태그 문자열에서)가 무엇인지 식별하는 방법입니다.

예제 : 결과 단락은 '단어, 구문, 용어, foo, bar, anything'인 $ tags 문자열의 'foo'태그와 유사했습니다. 어떻게 foo를 원인으로 식별 할 수 있습니까?

답변

2

당신은 이런 식으로 뭔가를 시도 할 수 :

SELECT 
    CASE WHEN tip LIKE '%foo%' then 'foo' 
     WHEN tip LIKE '%bar%' then 'bar' 
     WHEN tip LIKE '%anything%' then 'anything' 
    END as MatchedTag, 
    i.* 
FROM i 
WHERE tip LIKE '%foo%' 
    OR tip LIKE '%bar%' 
    OR tip LIKE '%anything%' 

그것은 현재의 쿼리처럼 $tags 변수에서 생성 될 필요가있을 것이다.

+0

전에 본 적이 없었습니다 -> i. * –

+1

그냥 'i'테이블의 모든 필드를 선택한다는 의미입니다. 하나의 테이블에서만 선택을 할 때'select *'라고 말하는 것과 같습니다. 이 경우 효과가 없습니다. 내 습관이 들어갔을뿐입니다. – mellamokb

+0

아니요, 꽤 깔끔한 것 같아요! –

관련 문제