2010-11-22 3 views
1

나는 상상할 수있는 것보다 두 배나 많은 일을하는 것에 대한 염려가 생겼다 고 생각합니다.데이터베이스 정규화 및 지연 개발

나는 더 간단한 해결책을 생각하기 위해 MySQL과 PHP 모두에서 경험이 부족할 수 있다는 생각을 받아들입니다.

내 문제는 여러 개의 테이블이 있고 더 많은 정보를 추가 할 수 있다는 것입니다.이 테이블은 부모 테이블이며 ID (int)와 ID를 식별하는 이름을 포함합니다.

현재이 필드에는 적어도 15 개의 필드가있는 7 개의 테이블이 있습니다. 모든 테이블에는 부모 테이블에 연결할 수있는 ID가 들어있는 필드가 있습니다.

이 데이터는 모두 채울 필요가 없습니다. 부모 테이블에 해당 항목을 하나 만들어야합니다. 다른 테이블의 경우 양식이 따로 있습니다.

이제 이러한 양식은 필드의 데이터를 업데이트하기 위해 만들어 졌으므로 데이터를 사용할 수있는 경우 표의 데이터를 가져와야합니다.

내 양식에서 데이터를 수신하면 모델에서 UPDATE 쿼리를 사용할 수 있습니다. 그러나 업데이트하려는 테이블에 해당 ID에 대한 항목이 없으면 삽입해야합니다. 내가 뭔가 다른 일을하거나 똑똑하거나 수행해야하는이 단지 방법입니다 - 나는이 내가 가진 모든 테이블에 대해이 작업을 수행해야

$sql = "SELECT id FROM table_x WHERE parent_id = ".$parent_id; 
$res = $mysql_query($sql); 
if(mysql_num_rows($res) == 1) 
{ 
    $sql = "UPDATE table_x SET ... WHERE parent_id = ".$parent_id; 
} 
else 
{ 
    $sql = "INSERT INTO table_x VALUES (...)"; 
} 
mysql_query($sql); 

:

그래서, 내 현재의 의사 코드는 다음과 같다 ? 왜냐하면 이것은 나에게 매우 비효율적 인 것 같습니다.

답변

4

사용

INSERT ... ON DUPLICATE KEY UPDATE Syntax 

기록이없는 경우, 그것은 기존의 레코드를 업데이트 할 것이다, 그렇지 않으면

를 삽입하고 당신이 삽입하기 전에 검사를 건너 뛸 수 있습니다 - details

이 가정 관계 부모 테이블에 대한 각 테이블 7 개가 1 : 1입니다.

+0

정확히 내가 찾고있는 것이 었습니다. – Repox

0
mysql_query("UPDATE table table_x ..... WHERE parent_id=".$parent_id); 
if (mysql_affected_rows()==0) { 
    mysql_query("INSERT INTO ....."); 
} 
MySQL의에서
+0

코드 형식을 사용하십시오 (수정 됨). 또한, 나는 '중복 중복 키 업데이트'솔루션이 훨씬 더 아름답다고 생각한다. – oezi

0

당신은이 작업을 수행 할 수 있습니다

INSERT INTO table 
    (
    col1, 
    col2 
) VALUES(
    'val1', 
    'val2' 
) ON DUPLICATE KEY UPDATE table SET 
    col2 = 'val2' 

자세한 내용은

2

documentation를 살펴 또는 사용 REPLACE 대신 INSERT을 - 그것은 삽입이다, 그러나 DELETE를 할 것입니다 다음 때 INSERT 고유 키 (예 : 기본 키)가 위반되었습니다.

+0

저는 아이디어를 좋아합니다. 그래서 제가 당신의 답을 득표했습니다.하지만 이중 쟁점으로 인해 저는 제가 필요한 욕구를 갖게되었습니다. – Repox

+0

'ON DUPLICATE'는 갈 길이지만, MySQL 4.1.0 이후 부터만 사용 가능합니다. -하지만 이제는 상위 버전을 실행해야합니다 :) – Konerak