2010-09-16 3 views
2

Je souhaite insérer une ligne de données dans une table à cinq colonnes (cette table rejoint les membres et les jeux); quatre des cinq colonnes sont connues, tandis que le quatrième, rang, doit être calculée dynamiquement:Aide sur la requête MySQL synatx

wishlists(id (int, pk), memberid (int, FK), gameid(int, FK), rank (int), createdat(timestamp)) 

INSERT INTO wishlists (memberid, gameid, rank) 
VALUES (somememberid, somegameid,) 

Le rang de valeur doit rechercher la table et trouver tous les documents appartenant à un certain membre, comprendre les rangs et insérez le nouvel enregistrement avec le rang le plus bas. J'ai essayé quelques variantes, mais je ne peux pas obtenir la bonne syntaxe. Je sais comment le faire dans deux requêtes, mais je ne peux pas comprendre comment le faire dans une requête.

EDIT Le code suivant, que je l'ai utilisé à une occasion avant, les rendements [Err] 1582 - Incorrect parameter count in the call to native function 'ISNULL'

insert into wishlists (memberid, gameid, rank) 
select 
memberid, 
gameid, 
MAX(ISNULL(Rank,0))+1 
from wishlists; 
+0

Voir mon commentaire ci-dessous: devrait être IFNULL pas ISNULL – zevra0

Répondre

3
INSERT 
INTO wishlists (memberid, gameid, rank) 
SELECT @memberid, @gameid, COALESCE(MAX(rank), 0) + 1 
FROM wishlists 
WHERE memberid = @memberid 

Remplacez votre réelle memberid et gameid en place des @ paramètres préfixés.

+0

Parfait, merci! Excepté pour ET gameid = @gameid - puisque cela ne se classera que lorsqu'un jeu apparaît deux fois dans la liste d'un membre ... pourquoi utiliserais-tu coalesce (max) et pas max (isnull) ici? – Mohamad

+0

@Mel: Je suis plus habitué à 'COALESCE'; d'ailleurs, c'est une norme. – Quassnoi

1

pas complètement sûr que je comprends votre schéma, mais vous êtes probablement d'insérer l'aide d'une instruction SQL ...

insert into wishlists (memberid, gameid, rank) 
select 
memberid, 
gameid, 
MAX(IFNULL(Rank,0))+1 
from wishlists; 

EDIT: la syntaxe ... doit être "ifnull".

+0

Je reçois un "Nombre de paramètres incorrects dans l'appel à la fonction native 'ISNULL'" pour une raison quelconque .. – Mohamad