Ich habe die folgende MySQL-Tabelle:Neuen Datensatz einfügen, wenn er vorher nicht existierte, andernfalls aktualisieren Sie ihn. Auch legen Sie nicht mehr als N-Datensätze für eine bestimmte Bedingung
CREATE TABLE `tblUsg` (
`id` INT(11) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
`ip` VARCHAR(46) NOT NULL,
`dtm` DATETIME NOT NULL,
`huid` BINARY(32) NOT NULL,
`licnm` VARCHAR(20) NOT NULL,
`lichld` VARCHAR(256) NOT NULL,
`flgs` INT NOT NULL,
`agnt` VARCHAR(256),
INDEX `ix_huid` (`huid`),
INDEX `ix_licnm` (`licnm`),
UNIQUE KEY `ix_lichuid` (`huid`, `licnm`)
) AUTO_INCREMENT=0 CHARACTER SET utf8 COLLATE utf8_unicode_ci;
Dann ist das Ziel der folgenden PHP-Skript ist, einen neuen Datensatz einfügen, nur wenn ein Datensatz mit den beiden huid
und licnm
existieren nicht bereits in dieser Tabelle Ist dies der Fall, Update statt:
if(@mysql_query(
"INSERT INTO `$tblUsage` (`ip`, `dtm`, `huid`, `licnm`, `lichld`, `flgs`, `agnt`)\n".
"VALUES ('$strIP', '$strDate', UNHEX('$strHUID'), '$strLicNm', '$strLicHld', '$strFlgs', '$strAgnt')\n".
"ON DUPLICATE KEY UPDATE `ip`='$strIP', `dtm`='$strDate', `lichld`='$strLicHld', `flgs`='$strFlgs', `agnt`='$strAgnt'"
, $link) !== false)
{
//See how many rows did we insert
$iRows = @mysql_affected_rows($link);
if($iRows === 1)
{
//Added new record
...
}
else if($iRows === 0 || $iRows === 2)
{
//Updated existing record
...
}
else
{
//Error
...
}
}
else
{
//Error
...
}
Aber jetzt brauche ich eine weitere Bedingung hinzufügen - einfügen nicht mehr als N
Datensätze mit (ix_lichuid
eindeutigen Schlüssel Einschränkung.) das gleiche licnm
. (Damit meine ich Gesamtdatensätze mit dem übereinstimmenden Feld licnm
in der Tabelle.)
Haben Sie eine Idee, wie Sie das obige SQL ändern, um das zu tun? Ich kann nicht scheinen, es herauszufinden ...
PS. Ich benutze PHP 5.3
Warum verwenden Sie 'mysql_' Funktionen? Sie sind seit langer Zeit veraltet und werden in den neuesten PHP-Versionen nicht mehr unterstützt. Auch Ihr Code scheint anfällig für SQL-Injection zu sein. Verwenden Sie stattdessen vorbereitete Anweisungen. – trincot
@trincot: Dies ist für einen alten Code. Es ist auch nicht das, was ich frage, bitte nimm es nicht in die falsche Richtung. PS. Ich benutze 'mysql_real_escape_string' vor dem Einfügen dieser Variablen. – c00000fd
So sei es, ich ziehe dann weiter. Viel Glück. – trincot