2013-03-20 3 views
0

저는 데이터베이스 멍청한 놈입니다. PHP 배열의 항목과 MySQL의 내포 된 배열의 항목을 비교하여 어떻게 행을 검색합니까? 편의성 때문에 저렇게 저장되어 있지만, 내가 원하는 것을하기에 더 좋은 방법이 있다면, 나는 모든 귀입니다. 나는 (내가 handwaving이야 어디 * *를 표시하기 위해 사용하는) 이런 식으로 뭔가를 찾고 있어요 : 제가 DB에 항목을 저장하고 어떻게쿼리에서 PHP 배열에 MySQL 내포 된 배열을 일치 시키십시오.

다음
$sql = "SELECT * FROM codeunits"; 
$sql .= " WHERE CASE WHEN private=1 THEN creatorID=:userID ELSE true END"; 
if (isset($tags)) 
{ 
    $tag_ids = join(',',$tags); 
    $sql .= " AND ****items in mysql array 'tags' IN :tags"; 
    if($stmt = $this->_db->prepare($sql)) { 
    $stmt->bindParam(":userID", $userID, PDO::PARAM_STR); 
    $stmt->bindParam(":tags", $tag_ids, PDO::PARAM_STR); 
    $stmt->execute(); 
    $stmt->closeCursor(); 
    } 
} 

입니다. $ values는 태그 열에 대한 쿼리에 바인딩되므로, 왜 나는 그것을 MySQL 배열이라고 부릅니다.

$tags = array(); 
    foreach ($_POST['tags'] as $selectedOption) 
    { 
     $tags[] = $selectedOption; 
    } 
    $values = implode(",",array_values($tags)); 
    $sql = "INSERT INTO " 
     ."codeunits(tags)" 
     ." VALUES(:tags)"; 
     if($stmt = $this->_db->prepare($sql)) {    
      $stmt->bindParam(":tags", $values, PDO::PARAM_STR); 
      $stmt->execute(); 

      $stmt->closeCursor(); 

      return true; 
     } 

이렇게하면 내 데이터베이스에 'tag1, tag2, tag3'과 같은 항목이 생성됩니다. 아주 간단한 문자열.

+0

MySQL은 배열이없는 진정한 – ITroubs

+0

을 :

대신 당신은 테이블 "태그"다음은 문 "의"에 가입 사용할 수 있습니다, 한 줄에 하나의 태그를 들고 있어야한다 내가 의미하는 바를 분명히했습니다. 나는 하나의 문자열로 함몰시킨 PHP 배열을 사용하고있다. 배열과 비교하기를 원하는 문자열입니다. – jakev

+0

실제로 우리에게 $ 값이 있습니까? – ITroubs

답변

0

이 종류의 쿼리에는 좋은 데이터베이스 디자인이 아니므로 LIKE를 사용하여 태그를 찾아야합니다. ...

SELECT * FROM codeunits JOIN tags ON tags.codeunit_id=codeunits.ID WHERE tags.name IN (:tags) AND CASE WHEN private=1 THEN creatorID=:userID ELSE true END 
+0

유지 관리해야하는 거대한 프로젝트가 있다면 "해야"하면 문제를 해결할 수 없습니다! – ITroubs

+1

오늘은 고칠 시간이 없습니다.) – Mike

+0

@ 물론, 그의 질문에 그는 "편리함 때문에 그렇게 저장되어 있지만, 내가 원하는 것을 할 수있는 더 좋은 방법이 있다면, 나는 모두 다. 귀 " – redmoon7777

관련 문제