« Et serait-il également,« sinon, mettez à jour les champs de la plus ancienne ligne? »
Et ce serait aussi, un annendum significatif plutôt sanglant: P
Je ne ferais pas quelque chose de si complexe dans une seule requête, je choisirais d'abord de tester pour le plus ancien, puis de mettre à jour ou insérer en conséquence.
Ne sachant pas quelle langue vous travaillez dans autre que SQL, je vais en tenir à des parties non pseudocode-SQL.
SELECT TOP 1 id FROM gifts
WHERE (SELECT COUNT(*) FROM gifts WHERE gift_giver_id = senderidvalue
ORDER BY gift_date ASC) > 9;
{if result.row_count then}
INSERT INTO gifts (gift_giver_id, gift_receiver_id,gift_date)
VALUES val1,val2,val3
{else}
UPDATE gifts SET gift_giver_id = 'val1',
gift_receiver_id = 'val2',gift_date = 'val3'
WHERE {id = result.first_row.id}
Le problème avec votre demande est que vous essayez de trouver une seule requête pour effectuer une commande SELECT ainsi que soit un INSERT ou UPDATE. Il se peut que quelqu'un vienne m'appeler pour me prouver le contraire, mais je pense que vous demandez l'impossible, à moins que vous ne vouliez entrer dans des procédures stockées.
Et que ce serait aussi, «sinon, mettez à jour les champs de la plus ancienne ligne? – Don
Umm ... pas le plus ancien dans ce cas, mais plutôt la date du cadeau pour la même paire donneur/receveur. Donc, d'une certaine façon, la date reflète le dernier cadeau entre les deux, mais en maintenant max 10 cadeaux. En vérité, ce qui précède est une simplification. La clé primaire réelle est une combinaison VARCHAR d'ID donneur/récepteur et il n'y a pas de clé primaire INT. Deux colonnes seulement. – Tom