2

phpにネストされた配列があり、重複が存在しない場合にのみmysqlテーブルにデータを挿入しようとしています。複製は、sensor_serialおよびdatesフィールドとの一致のみをチェックする必要があります。IDは他のフィールドに関係なく一意であるため、DUPLICATEはうまくいきません。これはテーブルレイアウトです:

CREATE TABLE IF NOT EXISTS `temps_test` (
    `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
   `sensor_serial` varchar(64) COLLATE latin1_general_ci DEFAULT NULL,
    `temp_c` float DEFAULT NULL,
    `dates` datetime DEFAULT NULL,
    PRIMARY KEY (`id`),
    KEY `date` (`dates`)
)

これは私の機能しないコードです。私はそれを完全に正しく理解できないようです。

foreach ($output as $k => &$v) {
    $sql = "INSERT INTO temps_test (sensor_serial,temp_c,dates) VALUES ('$v[7]','$v[3]','$v[5]') WHERE NOT EXISTS (SELECT * FROM temps_test WHERE sensor_serial='$v[7]' AND dates='$v[5]')";
    $go = mysql_query($sql) or die( mysql_error() );
}

これはこの方法で行うことができますか、それとも私のアプローチは完全にオフですか?

4

1 に答える 1

0

使ってみてくださいON DUPLICATE KEY UPDATE

INSERT INTO temps_test (sensor_serial,temp_c,dates)
VALUES ('val1','val2','val3') 
ON DUPLICATE KEY UPDATE sensor_serial=sensor_serial;

フィールドに制約を追加してくださいsensor_serial、例

CREATE TABLE IF NOT EXISTS `temps_test`
(
    `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
   `sensor_serial` varchar(64) COLLATE latin1_general_ci DEFAULT NULL,
    `temp_c` float DEFAULT NULL,
    `dates` datetime DEFAULT NULL,
    PRIMARY KEY (`id`),
    KEY `date` (`dates`),
    CONSTRAINT t_uq INIQUE (`sensor_serial`)     -- <== this one
)
于 2012-09-29T15:30:55.827 に答える