CronJob-Service
bei SELFPHP mit ...
|
+ minütlichen Aufrufen
+ eigenem Crontab Eintrag
+ unbegrenzten CronJobs
+ Statistiken
+ Beispielaufrufen
+ Control-Bereich
Führen Sie mit den CronJobs von
SELFPHP zeitgesteuert Programme
auf Ihrem Server
aus. Weitere Infos
|
:: Anbieterverzeichnis ::
Globale Branchen
Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP
:: Newsletter ::
Abonnieren Sie hier den kostenlosen
SELFPHP Newsletter!
|
MySQLi/PDO/(MySQL) Anfänger, Fortgeschrittene oder Experten können hier Fragen und Probleme rund um MySQLi/PDO/(MySQL) diskutieren |
03.09.2004, 02:18:32
|
Junior Member
|
|
Registriert seit: Jun 2003
Beiträge: 194
|
|
Zeile einfach überspringen bei Unique-Verletzung
Code:
## Diese Tabelle existiert schon und ist gefüllt
## (»id« ist hier nicht der Primary Key):
CREATE TABLE be_backup (
backup_id int(10) unsigned NOT NULL auto_increment,
aend timestamp(14) NOT NULL,
login tinyint(3) unsigned default '0',
id int(11) unsigned NOT NULL default '0',
ma tinyint(4) default NULL,
a_ue tinyint(3) unsigned default NULL,
email varchar(150) default NULL,
PRIMARY KEY (backup_id),
KEY id (id)
) TYPE=MyISAM;
## Jetzt möchte ich eine Tabelle, die folgende Form hat:
CREATE TABLE ma_link
(
id SMALLINT(5) UNSIGNED NOT NULL AUTO_INCREMENT,
be_id SMALLINT(5) UNSIGNED,
ma_id TINYINT(3) UNSIGNED,
beginn DATE,
PRIMARY KEY (id)
);
## Das klappt auch.
## In der Zieltabelle darf es für jeden Wert »be_id« nur
## verschiedene Werte »beginn« geben. Deshalb setze ich
## einen Unique-Index auf die beiden Felder:
ALTER TABLE ma_link ADD UNIQUE be_date_unique (be_id, beginn);
## Mit folgendem Statement versuche ich nun, das jeweils älteste
## Änderungsdatum pro »id« (ja, es gibt mehrere Einträge) und »ma«
## in die Zieltabelle zu bekommen.
INSERT INTO ma_link (be_id, ma_id, beginn)
SELECT id, ma, min(aend) AS d
FROM be_backup
WHERE ma IS NOT NULL
AND ma != 0
GROUP BY id, ma
ORDER BY d DESC;
## Ohne vorher gesetzten Unique-Index klappt das auch -- mit ihm kommt
## immer dann eine Fehlermeldung, wenn erstmals ein doppelter
## Eintrag auftaucht (dafür ist der Unique-Index ja auch gedacht),
## allerdings bricht dann auch der ganze Befehl ab.
## Wie überrede ich MySQL dazu weiterzumachen bzw. hat jemand eine
## bessere Idee für das Problem?
|
03.09.2004, 08:46:26
|
Junior Member
|
|
Registriert seit: Apr 2003
Ort: TÜ
Beiträge: 337
|
|
Hi tapferesschneid,
ich befürchte, daß Du bei einer UNIQUE- Verletzung nicht an einem Abbruch des kompletten Statements herum kommst.
Eine, wenn auch umständliche, Möglichkeit, die Verletzung zu vermeiden ist, daß Du vorher einen SELECT mit den einzufügenden Daten machst. Kommt mindestens ein Treffer zurück kannst Du im php-Code das INSERT Statement umgehen und eventuell mit einem weiteren Datensatz Dein Glück versuchen.
Eine andere Möglichkeit sehe ich momentan nicht, da Du Dir ja sonst die Tabelle "kaputt schiesst", wenn Du zwei identische Werte drin hast.
HTH,
Andy
|
03.09.2004, 09:29:29
|
Junior Member
|
|
Registriert seit: Jun 2003
Beiträge: 194
|
|
Mit PHP wäre das ganze ja kein Problem: Da könnte ich sogar auf das prüfende SELECT verzichten, weil mysql_query() entweder ausgeführt wird oder eben nicht; dann kommt der nächste der vorher per Gesamt-SELECT eingelesenen Datensätze -- und fertig. Wie aber nur mit MySQL?
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
Forumregeln
|
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.
HTML-Code ist aus.
|
|
|
Alle Zeitangaben in WEZ +2. Es ist jetzt 22:09:29 Uhr.
|