2013-04-28 2 views
-3

을 삭제 내 MySQL의 테이블에 열을 가질 수 있도록 같은 데이터를 저장,배열을 검색하고 그 값

'fb:username;yt:youtubeUsername;tw:twitterUsername;uk:websiteURL' 

이 모든 값에 의해 구분되는 ';'. 내가 알고 싶은 것은이 배열의 값을 제거하는 방법 (사용자가 YouTube 계정 링크를 제거하기를 원한다고 가정), 폭발 기능을 사용하여 필드를 검색하고 행에서 값을 깨끗하게 제거하는 방법입니다.

희망 당신을 혼란스럽게하지 않았습니다.

 $social = explode(";", $arrayquery['socialNetworks']); 
     $count = substr_count($arrayquery['socialNetworks'], ';') + 1; 

     for($i = 0; $i < $count; $i++) { 
      # Seperate data so we can read it 
      $prefix = substr($social[$i], 0, 2); 
      $url = strstr($social[$i], ':'); 
      $url = substr($url, 1); # Remove : from resources 

{ my script I need to run in For loop. } 
     } 

이것은 필드에서 데이터를 추출하는 데 사용하는 스크립트입니다.

+6

그리고 이것이 DB 테이블을 정상화하는 이유입니다. 따라서 이런 끔찍한 논리를 사용하지 않아도됩니다. 정규화 된 테이블을 사용하면 ** SIMPLE ** DELETE FROM ... 쿼리로 줄일 수 있습니다. –

답변

0

데이터베이스 기능은 전혀 사용하지 않습니다. 예를 들어, 한 번에 하나의 열을 업데이트하는 간단한 작업이 지금

id facebook youtube   twitter   uk 
1  username youtubeUsername twitterUsername http://stackoverflow.com 

:

가장 쉬운 예를 들어이 같은 테이블이하는 것입니다 UPDATE table SET youtube = "" WHERE id = 1;

쉬운하지만 당신은 필요 더 "종류"의 정보가 필요한 경우 테이블 스키마를 업데이트하십시오. 이보다 유연하게 할 수 있습니다

표 1

id `othercolumrelatedtouser` 
1  'otherdata' 

표 2 이제

id table1ID tag   value 
1  1   facebook username 
2  1   youtube  youtubeUsername 
3  1   twitter  twitterUsername 
4  1   url   http://stackoverflow.com 

당신은 당신이 무엇을 의미합니까 DELETE FROM Table2 WHERE table1ID = 1 AND tag = "youtube";

0

같은 것을 사용 할 수있을 것 "제거를 "? 문자열에서 특정 네트워크를 제거하려는 경우 또는 네트워크가 여전히 문자열에 존재하는 경우 네트워크의 가치를 제거 하시겠습니까? 어쨌든, 여기이 두 가지 문제에 대한 솔루션입니다 :

$arrayquery['socialNetworks'] = 'fb:username;yt:youtubeUsername;tw:twitterUsername;uk:websiteURL'; 
$networks = explode_networks($arrayquery['socialNetworks']); 

//Uncomment this print_r to see what $networks looks like 
//print_r($networks); 

//here you have the choice: 
//To set the value of Twitter account (for example) to an empty string 

$networks['tw'] = ''; 

//or if you want to remove twitter from the list of networks, remove the above line and uncomment the below one 
//unset($networks['tw']); 

$networks = implode_networks($networks); 

//See how your string looks like 
//echo $networks  



//Functions 

function explode_networks($networks) { 
    $networks = array_filter(explode(';' , $networks)); 
    $return = array(); 
    foreach($networks as $netw) { 
     list($nw , $data) = explode(':' , $netw); 
     $return[$nw] = $data; 
    } 
    return $return; 
} 

function implode_networks($networks) { 
    $return = array(); 
    foreach($networks as $nw => $data) { 
     $return[] = $nw . ':' . $data; 
    } 
    return implode(';' , $return); 
} 

그것이 도움이되기를 바랍니다.

관련 문제