La mia soluzione (usando Zend) era BLOCCARE la tabella, quindi interrogare item_number, aggiungere il risultato alla query di inserimento, inserire e SBLOCCARE la tabella. Ecco come BLOCCARE e SBLOCCARE:
$sql = "LOCK TABLE items WRITE";
$this->getAdapter()->query($sql);
//run select to get last item_number
//append result to insert array
//insert
$sql = "UNLOCK TABLES";
$this->getAdapter()->query($sql);
Un altro modo è scrivere la query in modo che il valore venga selezionato durante l'inserimento. Ecco un esempio:
$sql = INSERT INTO items (item_id, item_family, item_name, item_number)
VALUES (item_id, item_family, item_name, (SELECT item_number FROM... )+1);
$this->getAdapter()->query($sql);
Maggiori informazioni su questo tipo di query in MySQL Web