私は "プロファイル"と呼ばれるテーブルを持っています。このテーブルには "user_id"というカラムがあり、名前を "username"に変更し、タイプをINT(11)からVarchar(255)に変更しました。ただし、この列の内容は数値IDです。テーブルの列を別のテーブルとの関係に基づいて更新するにはどうすればよいですか?
これらのIDは、「ユーザー」と呼ばれる別のテーブルに対応しています。そのテーブルには "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!';
}
}
}
それはそれは大きな問題ではないのですが、私のスクリプトは、すべてで開始することは効率的ではありませんテーブルにはわずか50kレコードしかないためです。とにかくこれをmysqlから直接行う方法は何でしょうか?
私の質問はあなたがこれをしたい理由でしょうか?うまく構造化された正規化されたスキーマから、問題を引き起こす可能性が高いものに移行しています。 – liquorvicar
@liquorvicarうん、私はしないことにしました。私の根本的な理由は、Bobの代わりにidを使用するのではなく、mysite.com/profile?user=Bobのように見えるようにすることで、ユーザー名に基づいてユーザーを選択することでした。しかし、数値IDとvarcharのコンテンツの選択が高速で、IDが永遠に変わらないという事実を考慮しなかったので、今代わりに私はmysite.com/profile?user=Bob&id=123のようになります名前とIDは両方ともそこにありますが、私はIDで選択しており、美的/ユーザビリティ上の理由からその名前を持っています。 – TK123