8

次のようなテーブルがあります。

Number  | Name 
--------+--------
123     | Robert

これは私がやりたいことです:

Number がすでにデータベースにある場合は、新しいレコードを挿入しないでください。

番号はデータベースになく、名前はある場合は、新しい名前を作成して挿入します。たとえば、123forNumberBobforを含むレコードNameがある場合、それを挿入したくありませんが、456forNumberRobertforを含むレコードを取得した場合は、 and をname挿入456Robert1ます。次のように、重複を個別にチェックするつもりでした。

SELECT * FROM Person where Number = 123;

//If number is not found
SELECT * FROM Person where Name = 'Robert';

//If name is found, add a number to it.

2 つのステートメントを組み合わせる方法はありますか?

4

5 に答える 5

1

番号と名前の両方を一意にします。

   ALTER TABLE  `person` ADD UNIQUE (`number` ,`name`); 

ON DUPLICATE で挿入できるようになりました

INSERT INTO `person` (`number`, `name`, `id`) VALUES ('322', 'robert', 'NULL')       ON DUPLICATE  KEY UPDATE `id`='NULL';

名前の後に数字を追加するには、代わりに自動インクリメント列を使用することをお勧めします。

于 2013-05-17T16:08:41.707 に答える
1
SELECT * FROM Person WHERE Number = 123 OR Name = 'Robert'

私はしばらく SQL を扱っていないので、これは間違っているかもしれません ;)

編集:

$number = 123;
$name = 'Robert';
$query = mysql_query("SELECT * FROM Person WHERE Number = $number OR Name = '$name' ");

if (mysql_num_rows($query) == 0 ) {
//-> Add your record, it's unused
} else if (mysql_result($query, 0, 'number') == $number && mysql_result($query, 0, 'name' == $name)) {
//combination of number and name already exists -> modify name and add record
} else {
echo "Number is used by another name";
}
于 2013-05-08T20:15:32.957 に答える