phpbar.de logo

Mailinglisten-Archive

SELECT IF

SELECT IF

Uwe Driessen driessen at fblan.de
Son Mar 29 11:15:08 CEST 2009


> > On Behalf Of Thomas Goik - auxion.de
> >
> >
> > > schon mal mit UNIQUE KEY Probiert?
> > > INSERT ... ON DUPLICATE KEY UPDATE
> > > http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html
> > >
> table records
> 
> id domain_id  name type content ttl prio change_date
> 
> id 		unique
> name 		index
> name, type 	index
> domain_id	index
> 
> problem für jede Domain existiert
> 
> 1 	A 		Record
> 1 	SOA		Record
> 2	NS		Record
> 1 bis X  MX 	Record
> 
> Dazu kommen noch Subdomains usw. alle über domain_id in table Domains referiert.
> 
> Ich kann keinen uniq über domain_id, name, type legen,
> Content ändert sich zumindest bei den SOA records auch beim Update

Ich spreche mal ein bisschen mit mir selber manchmal hilft es wenn anderen erklärt was man
möchte *g (nein ich höre noch keine Stimmen *gg)

SELECT IF( (

SELECT t2.id
FROM pdns.records t2
WHERE t2.name = 'abi-1993.net'
AND TYPE = 'SOA'
) >0, (

SELECT t2.id
FROM pdns.records t2
WHERE t2.name = 'abi-1993.net'
AND TYPE = 'SOA'
), (

SELECT max( t3.id ) +1
FROM pdns.records t3 ) 
);

Bringt mir sauber die werte bei bestehenden Datensätzen und auch die nächste ID

Eingebaut in 

INSERT INTO pdns.records(
id,
domain_id,
name,

TYPE ,
content,
ttl,
prio,
change_date
)
SELECT (

SELECT IF( (

SELECT t2.id
FROM pdns.records t2
WHERE t2.name = 'abi-1993.net'
AND TYPE = 'SOA'
) >0, (

SELECT t2.id
FROM pdns.records t2
WHERE t2.name = 'abi-1993.net'
AND TYPE = 'SOA'
), (

SELECT max( t3.id ) +1
FROM pdns.records t3 ) 
)
), t1.id, 'abi-1993.net', 'SOA', concat( 'ns1.deltaweb.de. hostmaster.deltaweb.de.',
CURDATE( ) +0, '00 86400 7200 604800 1800' ) , 21600, 0, Unix_timestamp( ) 
FROM pdns.domains t1
WHERE t1.name = 'abi-1993.net' ON DUPLICATE 
KEY UPDATE name = 'abi-1993.net',
domain_id = t1.id,
TYPE = 'SOA',
change_date = concat( 'ns1.deltaweb.de. hostmaster.deltaweb.de.', CURDATE( ) +0, '00 86400
7200 604800 1800' ) ,
ttl =21600,
prio =0,
change_date = Unix_timestamp( );


macht sogar sauber das Update bei einem bestehenden Datensatz aber fügt leider keinen
Neuen Datensatz ein also zurück zu Replace 



> 
> 


Mit freundlichen Grüßen

Drießen

-- 
Software & Computer
Uwe Drießen
Lembergstraße 33
67824 Feilbingert
Tel.: +49 06708 / 660045   Fax: +49 06708 / 661397


_______________________________________________
Allgemeine Infos zur Liste: http://www.4t2.com/mysql/
Verwaltung: https://lists.4t2.com/cgi-bin/mailman/listinfo/mysql-de

php::bar PHP Wiki   -   Listenarchive