Bir web uygulamasında bu tablo tasarım göz önüne alındığında:
CREATE TABLE `invoice` (
`invoice_nr` int(10) unsigned NOT NULL AUTO_INCREMENT,
`revision` int(10) unsigned NOT NULL DEFAULT '1',
PRIMARY KEY (`invoice_nr`,`revision`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_spanish_ci
Yeni bir fatura revizyon eklemek ve atanmış revizyon numarasını geri almak için en kullanışlı ve güvenilir yolu nedir?
İlk açık yaklaşım, paylaşılan bir ortamda beni güvenilmez vurur:
SELECT MAX(revision)+1 AS next_revision -- E.g. 2
FROM invoice
WHERE invoice_nr = 31416;
INSERT INTO invoice (invoice_nr, revision)
VALUES (31416, 2);
Bu alternatif görünüyor slightly daha iyi (aslında iyi olmadığını bilmiyorum):
INSERT INTO invoice (invoice_nr, revision)
SELECT 31416, MAX(revision)+1
FROM invoice
WHERE invoice_nr = 31416;
Ben yeni bir sorgu çalıştırdığınızda sürece ... ama revizyon numarasını bilemeyiz:
SELECT MAX(revision) AS last_revision
FROM invoice
WHERE invoice_nr = 31416;
Önerilen bir yöntem var mı?
mysql_query()
ark - App iyi eski mysql uzantısı PHP ile çalışır.