2011-01-12 3 views
0

는이 코드 (제거 PARAM 그냥 몇 가지 코드를 줄이기 위해 탈출)이 있습니다PHP MySQL이 코드를 구성하는 방법?

private function _get_tag_id($value) 
{ 
    $sql = "INSERT INTO tags (tag, added) VALUES ('$value', ".time().") " 
     . "ON DUPLICATE KEY UPDATE tag_id = tag_id"; 
    $id = execute($sql); 

    if (empty($id)) 
    { 
     $sql = "SELECT tag_id FROM tags WHERE tag = '$value'"; 
     $id = execute($sql); 
    } 

    return $id; 
} 

내 코드를 조직에서 정말 나쁜이야을하고 난 당신의 코드 DRY 유지의 중요성에 대해 읽어 봤는데. 이 쿼리에 포함 된 쿼리가 포함되어 있습니까? 예를 들어, 나는 몇 가지 필드에이 같은 쿼리를 수행해야하고, 제가했던 것은이로 변경됩니다

private function _get_field_id($field, $value) 
{ 
    $sql = "INSERT INTO {$field}s ({$field}, added) VALUES ('$value', ".time().") " 
     . "ON DUPLICATE KEY UPDATE {$field}_id = {$field}_id"; 
    $id = execute($sql); 

    if (empty($id)) 
    { 
     $sql = "SELECT {$field}_id FROM {$field}s WHERE {$field} = '$value'"; 
     $id = execute($sql); 
    } 

    return $id; 
} 

그 일부 유사한 기능을 줄일 수 있지만, 그것은 또한 읽기 쿼리가 더 힘들어합니다 처음에. 이 작업을 수행 한 후에 또 다른 문제는 필드에 대해 쿼리가 약간 다를 수있는 경우에 발생합니다. '이 추가 더러워지기 시작이야 이제

$sql = "INSERT INTO {$field}s ({$field}".($field == 'tag' ? '' : ", added").") " 
    . "VALUES ('$value', ".($field == 'tag' ? '' : time()).") " 
    . "ON DUPLICATE KEY UPDATE {$field}_id = {$field}_id"; 

,하지만 난 느낌 사람들이 돈이 : 나는 더 이상하고 어쩌면 쿼리는 이제 바꿀 것 추가 된 열을 필요가 없습니다, 필드가 태그 인 경우의가 있다고 가정 해 봅시다 실제로 그렇게하지 않습니다.

내가 읽은 또 다른 사항은 함수가 한 가지만 수행해야한다는 것입니다. 그래서 나는 이처럼이 함수를자를까요?

private function _get_tag_id($value) 
{ 
    $id = $this->_add_tag_id($value); 

    if (empty($id)) 
    { 
     $id = $this->_get_tag_id($value); 
    } 

    return $id; 
} 

아니면 이전 상태로 남겨 두는 것이 좋을까요?

코드 구성을 시도한 방법 중 하나라도 잘못되었다고 생각되는 경우 올바른 방법을 제안하거나 다른 방법으로 이러한 간단한 코드를 구성하는 것이 가장 좋습니다. 약간의 코드?

답변

0

거꾸로 뒤집을 것입니다. 먼저 선택하고 찾지 못한 경우 삽입하십시오.

두 가지 이유 :

1) 선택하고 더 자주 그 선택과 미스 찾을 수 있으므로 먼저 선택합니다 평균 속도에 있습니다.

2) "중복 키"는 나중에 SQL 데이터베이스없이 이동해야하는 경우 나중에 문제가 발생할 수있는 INSERT에 대한 비표준 확장입니다. (나는 그것이 MySQL이라고 생각한다).

어떤 것이 더 좋습니까? 저는 첫 번째 또는 세 번째를 이해하려고합니다.

+0

내 질문에 주로 쿼리 코드를 복제해야하는지 물어 보았지만 답변을 주셔서 감사합니다. 또한 더 작은 함수로 함수를 분해해야하는 경우에도 마찬가지입니다. 귀하의 제안에 대해, 나는 그것이 문제가 될 것이라고 생각하지 않도록 내가 MySQL에서 벗어날 것이라고 생각하지 않는다. 나는 번호 1을 사용하는 것을 고려할 것이다. – Joker

관련 문제