SELFPHP: Version 5.8.2 Befehlsreferenz - Tutorial – Kochbuch – Forum für PHP Einsteiger und professionelle Entwickler

SELFPHP


Professional CronJob-Service

Suche



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



:: Buchempfehlung ::

Fortgeschrittene CSS-Techniken

Fortgeschrittene CSS-Techniken zur Buchempfehlung
 

:: Anbieterverzeichnis ::

Globale Branchen

Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP  

 

:: Newsletter ::

Abonnieren Sie hier den kostenlosen SELFPHP Newsletter!

Vorname: 
Name:
E-Mail:
 
 

Zurück   PHP Forum > SELFPHP > MySQLi/PDO/(MySQL)
Hilfe Community Kalender Heutige Beiträge Suchen

MySQLi/PDO/(MySQL) Anfänger, Fortgeschrittene oder Experten können hier Fragen und Probleme rund um MySQLi/PDO/(MySQL) diskutieren

Antwort
 
Themen-Optionen Ansicht
  #1  
Alt 03.09.2004, 02:18:32
tapferesschneid tapferesschneid ist offline
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?
Mit Zitat antworten
  #2  
Alt 03.09.2004, 08:46:26
diver-network diver-network ist offline
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
Mit Zitat antworten
  #3  
Alt 03.09.2004, 09:29:29
tapferesschneid tapferesschneid ist offline
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?
Mit Zitat antworten
Antwort


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.

BB-Code ist an.
Smileys sind aus.
[IMG] Code ist aus.
HTML-Code ist aus.

Gehe zu


Alle Zeitangaben in WEZ +2. Es ist jetzt 07:51:42 Uhr.


Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.


© 2001-2024 E-Mail SELFPHP OHG, info@selfphp.deImpressumKontakt