2012-05-28 8 views
0

나는 다음과 같은 쿼리가 : 지금 쿼리가 행 예를 들어, 쉼표로 구분 된 여러 값이 brand_url을 가지고 위에서 테이블에 응답사용하여 배열 결과

$query_q_pass = sprintf("SELECT * FROM answers INNER JOIN users WHERE a_id = %s and answers.user_id = users.user_id"); 
$q_pass = mysql_query($query_q_pass, $cd) or die(mysql_error()); 
$row_q_pass = mysql_fetch_assoc($q_pass); 

는 델, 마이크로 소프트, HP, ...

는 내가하고 싶은 것은 brand_url 행에서 모든 값을 선택하고 내가 brand_url 내부에 존재하는 모든 브랜드를 추출합니다 다른 쿼리에 추가 할 수 있습니다. 이것은 다른 쿼리입니다 : 내가 배열을 사용하여 여러 가지 다른 방법을 시도

$query_conn_brands = 'SELECT * FROM brands WHERE brand_url = 'VALUE FROM ABOVE QUERY''; 
$conn_brands = mysql_query($query_conn_brands, $cd) or die(mysql_error()); 
$row_conn_brands = mysql_fetch_assoc($conn_brands); 
$totalRows_conn_brands = mysql_num_rows($conn_brands); 

하지만 난 얻을 모두가 브랜드 테이블에서 모든 결과입니다. 내가 할 모든 브랜드 테이블뿐만 아니라 내부에 존재하는 사람들은 테이블에 응답에서 모든 결과입니다

$brand_pass_ids = $row_q_pass['brand_id']; 
$array = array($brand_pass_ids,); 

$query_conn_brands = 'SELECT * FROM brands WHERE brand_url IN (' . implode(',', array_map('intval', $array)) . ')'; 
$conn_brands = mysql_query($query_conn_brands, $cd) or die(mysql_error()); 
$row_conn_brands = mysql_fetch_assoc($conn_brands); 
$totalRows_conn_brands = mysql_num_rows($conn_brands); 

위의 예에서 :이 내 마지막 실패 시도이다. 누군가가 이걸 도와 주길 바랍니다.

고마워요!

SELECT * FROM brands WHERE brand_url IN (dell,microsoft,hp) 

문자열 값이 있습니다, 그래서 그들은이 문자열로 처리해야합니다 : 조회의 모양 때문에

+1

고대 MySQL의 확장과 새로운 코드를 작성 중지주세요 : (더 이상 유지하고 지역 사회가 [중단 과정]을 시작했다 http://news.php.net/php.internals/53799). 대신 개선 된 [MySQLi] (http://php.net/mysqli) 확장 또는 [PDO] (http://php.net/pdo) 추상화 계층을 사용해야합니다. – eggyal

답변

1

이 실패 년대 이유입니다. 시도해보십시오.

implode(",",array_map(function($a) {return json_encode($a);},$array)) 

JSON으로 인코딩하는 것이 좋지 않을 수도 있지만 실제로는 좋은 선택입니다. 문자열은 따옴표로 묶여 필요에 따라 이스케이프 처리되고 숫자는 그대로 남으며 null도 올바르게 처리됩니다.

implode(",",array_map(create_function('$a','return json_encode($a);'),$array)); 
+0

그 코드가 다음과 같은 오류가 발생합니다 구문 분석 오류 : 예기치 않은 T_FUNCTION, 예상치 못한 ')'이 (가) 86 행의 Z : \ www \ answers \ q.php에 있습니다. –

+0

아, PHP 이전 버전을 사용하고 있습니다. 좋아, 편집해라. –

+0

예, brand_url 행에 하나의 결과 만있는 경우 결과가 나타납니다.dell, microsoft, hp, ... 어떤 결과도 얻지 못했습니다. –

1

사용의 MySQL의 FIND_IN_SET() 기능 :

Returns a value in the range of 1 to N if the string str is in the string list strlist consisting of N substrings. A string list is a string composed of substrings separated by “ , ” characters. If the first argument is a constant string and the second is a column of type SET , the FIND_IN_SET() function is optimized to use bit arithmetic. Returns 0 if str is not in strlist or if strlist is the empty string. Returns NULL if either argument is NULL . This function does not work properly if the first argument contains a comma (“ , ”) character.

mysql> SELECT FIND_IN_SET('b','a,b,c,d'); 
     -> 2

를 귀하의 경우 :

SELECT * FROM brands WHERE FIND_IN_SET(brand_url, ?) 

편집 : 익명 함수를 지원하지 않는 PHP의 이전 버전

하지만 d와 함께 검색어를 합칠 수는 있습니다. esired :

SELECT * 
FROM answers 
    JOIN users USING (user_id) 
    JOIN brands ON FIND_IN_SET(brands.brand_url, answers.brand_url) 
WHERE a_id = %s