"프로필"이라는 테이블이 있습니다. 이 테이블에는 "user_id"라는 칼럼이 있는데 이름을 "username"으로 변경하고 INT (11)에서 Varchar (255)로 변경했습니다. 그러나이 열의 내용은 여전히 숫자 ID입니다.다른 테이블과의 관계에 따라 테이블 열을 업데이트하는 방법은 무엇입니까?
이러한 ID는 "users"라고하는 다른 테이블에 해당합니다. 이 테이블에는 "user_id"및 "username"이라는 필드가 있습니다. "profiles"테이블의 각 행에 대해 먼저 사용자 이름 필드에 ID가 있는지 확인하고 사용자 테이블을 조회하여 해당 ID와 일치하는 사용자 이름을 얻은 다음 프로필 테이블의 사용자 이름 값을 업데이트해야합니다 에 대한 적절한 사용자 이름.
프로필 표 :
username | blah blah...
------------------------
1 | ...
사용자 테이블 :
user_id | username
------------------------
1 | Joe
나는 "조"로 업데이트 할 수있는 프로파일 테이블에 사용자 이름 필드의 값이 필요합니다.
나는이 PHP 스크립트를 내놓았다하지만 어떤 이유로 단 4 레코드를 업데이트 한 후 작동을 멈 춥니 다 : 그건 그렇게 큰 문제가되지 비록,
$sql = 'SELECT username FROM profiles';
$query = mysql_query($sql);
while($row = mysql_fetch_assoc($query)) {
$id = $row['username'];
$sql = 'SELECT username FROM users WHERE user_id = '. $id;
$query = mysql_query($sql);
while($row = mysql_fetch_assoc($query)) {
$sql = "UPDATE profiles SET username = '".$row['username']."' WHERE username = $id";
$query = mysql_query($sql);
if(!$query) {
echo 'error!';
}
}
}
내 스크립트로 시작하는 모든 것을 효율적이지 않다 테이블에는 단지 50,000 개의 레코드가 있기 때문입니다. 어쨌든 mysql에서 직접이 작업을 수행하는 방법은 무엇입니까?
내 질문에 왜 이렇게하고 싶습니까? 잘 구조화 된 정규화 된 스키마에서 작업하기가 더 어려워서 문제가 발생할 가능성이있는 스키마로 이동하고 있습니다. – liquorvicar
@liquorvicar 그래, 나는하지 않기로 결정했다. 나의 초기 이유는 Bob 대신에 id를 갖는 것보다는 mysite.com/profile?user=Bob과 같은 URL을 사용하여 사용자 이름을 기반으로 사용자를 선택하는 것이 었습니다. 하지만 숫자 ID 대 varchar 콘텐츠를 선택하는 것이 더 빠를 것이라는 사실, ID가 영원히 변경되지 않는다는 사실을 고려하지 않았습니다. 이제는 대신 다음과 같이합니다 : mysite.com/profile?user=Bob&id=123, 그런 식으로 이름과 ID는 둘 다 있지만 ID로 선택하고 미적/유용성 이유로 이름을 지정합니다. – TK123