2016-08-25 7 views
0

Je suis à la recherche d'une solution pour ajouter un message entre deux messages et enregistrer la nouvelle commande dans la base de données.Mise à jour de l'ordre des messages avec une requête SQL

J'ai ajouté le support de commande pour les publications régulières et je prévois d'utiliser ce champ pour commander les articles dans une page. Les nouveaux messages sont créés à partir de la même page via AJAX. Tous les messages ont le même parent.

J'ai donc:

  1. Posta PostB
  2. Postc

Maintenant, je voudrais créer un nouveau poste (PostD) entre et PostB Posta. Ainsi, le nouvel ordre serait

  1. Posta
  2. PostD
  3. PostB
  4. Postc

Ainsi, le numéro de commande devrait être mis à jour pour les messages B et C et PostD est attribué à numéro de commande 2 lorsque le nouveau PostD est enregistré. Je me demande quelle serait la meilleure solution pour cela. Peut-être que je pourrais faire une requête SQL qui ferait quelque chose comme ceci:

obtenir tous les messages avec le parent parent XX et avec le numéro de commande> = nouveau numéro de poste et ajouter +1 aux numéros de commande de ces messages.

Toute aide sera grandement appréciée, merci!

+0

transactions Voir. Étape 1. Mettez à jour la référence de commande de chaque ligne avec une référence de commande> = 2. Étape 2. Insérez la nouvelle ligne. Je suppose que la colonne Post est votre CLÉ PRIMAIRE. – Strawberry

+0

Merci! Je vais essayer ça. –

+0

Il suffit d'ajouter une colonne d'horodatage? (Alors l'ordre est sans importance.) – jarlh

Répondre

-1

utiliser toujours pas de 10, vous avez la place pour 9 postes supplémentaires inbetween ..

+1

Qu'en est-il du 10e message? – Strawberry

+0

Hey pourquoi -1? C'est une solution à la question posée. Je suis d'accord que ce n'est pas la façon la plus élégante, mais ça fait le travail – verhie

+0

Désolé, mais ce n'est pas vraiment ce que j'ai demandé ... Merci quand même! –

0

Suivez les étapes de 10000.

algorithme:

  • Si nouveau poste après le dernier - ordre numéro pour durer numéro + 10000
  • Sinon obtenir la moyenne arithmétique numéro de commande entre avant et après messages
  • S'il n'y a pas de numéros libres entre les postes, exécutez la renumérotation complète des messages. Après l'insertion de la nouvelle ligne.

requête renumérotation:

update posts 
    set number=(select @i:[email protected]+10000) 
where (select @i:=1)=1 and (condition_for_select_posts_branch) 
order by number