2

わかりました。ユーザーのデバイスを収集するテーブルがあります。ユーザーがログインするときに、デバイスを登録する必要があります。デバイスが既に存在する場合は、タイムスタンプを更新するだけです。これは、ユーザーがログインしたときのみです。

テーブルは次のようになります。

device_id => BIGINT AUTOINCREMENT PRIMARY KEY
user_id => BIGINT FOREIGN KEY users(id)
device_name => VARCHAR(40) (Will be like 'Donald ducks iphone')
device_type => VARCHAR(10) (Will be defined by the client, like "IOS")
last_usage => TIMESTAMP (On update, new timestamp and all that)

したがって、ユーザーがログインすると、user_id、device_name、device_typeがあります。

私が欲しいもの:ID、名前、タイプがすでに行に存在する場合は、タイムスタンプを更新するだけです。それ以外の場合は、値を挿入します。

これは主キーとは何の関係もないので、これを行う方法がわかりません。もちろん、最初にこれらの値を選択し、それを返し、後で更新/挿入を行うようなこともできますが、これは正しくありません:)

4

4 に答える 4

3

まず、ユニークなものを作りdevice_nameますdevice_type

これで、いくつかのオプションがあります。次を使用できます。

INSERT IGNORE INTO devices (...) VALUES(...)

または、重要なエラーが無視されるのではないかと心配している場合は、次を使用してください。

INSERT INTO devices (...) VALUES(...)
ON DUPLICATE KEY UPDATE device_id = device_id

REPLACEこれは、古いレコードにはまったく影響を与えないがREPLACE、新しいIDとタイムスタンプを作成するという点で異なることに注意してください。

編集:タイムスタンプを更新する必要があるため、次を使用します。

INSERT INTO devices (...) VALUES(...)
ON DUPLICATE KEY UPDATE last_usage = NOW()
于 2012-11-21T16:36:24.307 に答える
3

MySQL 5.0 以降でREPLACEを使用できます。

REPLACE は INSERT とまったく同じように機能しますが、テーブル内の古い行が PRIMARY KEY または UNIQUE インデックスの新しい行と同じ値を持つ場合、新しい行が挿入される前に古い行が削除されます。

例:

REPLACE INTO TableName (user_id, device_id, device_name, device_type, last_usage) VAULES (1, 2, "Test Device Name, "Test Type", NOW()); 
于 2012-11-21T16:37:07.243 に答える
0
For Each r In Me.Lstbox_Tables.ItemsSelected

'Create a recordset with required data

sql = "SELECT * FROM " & Me.Lstbox_Tables.ItemData(r)

'tablename = "Gahpp00d_" + rs!Table_Name

Set rs = db.OpenRecordset(sql, dbReadOnly)

Dim SheetName As String

SheetName = Replace(Me.Lstbox_Tables.ItemData(r), "GAHPP00D_", "")


On Error Resume Next

excelWbk.Sheets(SheetName).Select

If Err.Number <> 0 Then

MsgBox Err.Number & ":" & Err.Description, vbCritical, "ERROR!!!"

MsgBox "Worksheet " & SheetName & " doesn't exist.", vbCritical, "Sheet Missing!!!"

excelWbk.Close False

appExcel.Quit


 Exit Sub

 End If
于 2012-11-21T16:36:41.067 に答える
0

これを mssql として mysql に変換する必要があるかもしれませんが、次の行に沿ったものです。

declare @count int
declare @user varchar
declare @machine varchar
declare @type as varchar

select @count = (select count(*) from [table] where user = @user and machine=@machine and type=@type)

if @count = 0
begin
insert into
[table]
select
@machine,
@user,
@type,
current_timestamp
end

if @count > 0
begin
update
[table]
set timestamp = current_timestamp
where
machine = @machine
and
user = @user
and
type = @type
end

よろしく、

マーカス

于 2012-11-21T16:45:30.340 に答える