2010-11-09 4 views
0

J'ai besoin d'obtenir l'ID (une colonne) de la dernière ligne insérée, dans une table. Je me demande s'il y a moyen de l'incorporer d'une manière ou d'une autre dans une autre requête, pour éviter d'avoir deux requêtes différentes? Cela semble beaucoup plus simple, et je crois que je l'ai déjà vu quelque part.PHP & Mysqli - Requêtes multiples en un?

Quelque chose comme ceci:

$query = "INSERT INTO a_table (x, y) VALUES ((SELECT id FROM another_table ORDER BY id DESC), 'y...')"; 

Toute idée comment faire? Merci.

Répondre

1

Si vous cherchez à obtenir le nouvel enregistrement créé par votre script, vous ne devriez jamais le faire de cette façon. Que se passe-t-il si une autre instance de votre script crée un enregistrement en même temps?

Le LAST_INSERT_ID() de mySQL renverra le dernier ID créé via cette connexion spécifique. Cependant, vous devez l'appeler immédiatement après votre instruction d'insertion.

Si obtenir le plus haut ID est littéralement ce que vous voulez, la réponse GSto travaillera pour vous.

0

Oui, MySQL a une INSERT .. instruction SELECT:

exemple:

INSERT INTO a_table (x, y) id SELECT, 'y' DÉCRET another_table PAR id DESC

bien Gardez à l'esprit, sauf si vous avez un champ ID auto_incrementing, la clause order by est inutile ici.

+0

Je vais examiner cela. Et oui, j'ai mis le champ ID à l'incrémentation automatique. Sinon, je ne verrais pas le but d'une pièce d'identité? Je veux dire, un identifiant devrait être unique et vous ne devriez pas avoir à vérifier le dernier ID avant d'insérer une nouvelle ligne, c'est juste ... inutile. Merci! – Anthony

+0

Comment cela fonctionnerait-il si je liais les paramètres? Voici mon code d'insertion original: http://codepad.org/Yvu9SoVp, comment ferais-je pour sélectionner l'ID d'une autre table et l'insérer comme exemple_id? – Anthony

+0

Oui, je sais, mais j'ai besoin d'obtenir l'ID d'une autre table. Quelqu'un pourrait-il me donner un exemple (jetez un oeil à ce codepad.org/Yvu9SoVp) sur la façon de le faire? Ce serait vraiment apprécié. – Anthony

1
INSERT INTO a_table (x, y) VALUES (SELECT max(id), 'y...' FROM another_table); 
+0

Il est sur mysqli, où il ne semble pas y avoir une telle fonction –

+0

Pas que je sache. : / – Anthony