IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Requêtes MySQL Discussion :

Requête SQL pour décaler des lignes


Sujet :

Requêtes MySQL

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Août 2010
    Messages
    265
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 265
    Points : 108
    Points
    108
    Par défaut Requête SQL pour décaler des lignes
    Bonjour,
    Je ne savais pas trop comment formuler mon problème dans le titre, j'ai besoin de quelques lignes pour l'expliquer ...

    Je fais en PHP/HTML/JS un projet pour la conception d'une zone Espace membre/Administration de Quizz et j'ai un problème:

    Dans une table "question", j'ai un champ NumeroQuestion qui représente tout simplement le numero de la question qu'un adminsitrateur veut créer...
    Par exemple si il y a déjà pour un questionnaire lambda 11 questions de créer, il va donc créer la numéro 12 pour sa nouvelle question...

    Quel type de requete me permettrait d'obtenir la plus grande valeur de la table contenue dans NumeroQuestion et de faire +1 donc ?

    ET...

    Si l'adminsitrateur veut supprimer la question 7 et qu'il y a 11 questions...
    il faut que les questions 8 à 11 soient décalées vers le bas , la question 8 devient la 7 , la 9 devient la 8 ect ...

    Quel type de requete peut faire ça ?

    Merci d'avance


    PS: j'avais mis aussi ce post dans le forum "debuter" mais c'est peut etre plus approprié ici, merci aux modérateurs de supprimer le mauvais post...et dsl...

  2. #2
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 950
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 950
    Points : 5 849
    Points
    5 849
    Par défaut
    Max + 1 te donnera le nouveau NumeroQuestion.
    Je te conseille de faire en une requête l'insertion et le max+1 pour éviter que 2 utilisateurs, se partageant le travail de 2 questions (la 12 et la 13), ne récupèrent chacun le numéro 12 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    insert into question (titre,description,NumeroQuestion)
    select 'Nouveau titre'
    	,'blablabla'
    	,(select max(NumeroQuestion)+1 from question) as NumeroQuestion
    Si l'adminsitrateur veut supprimer la question 7 et qu'il y a 11 questions...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    update question
    set NumeroQuestion = NumeroQuestion-1
    where NumeroQuestion > 7
    Après j'imagine que les questions sont catégorisées par thème ou autre donc à rajouter dans les WHERE.

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Août 2010
    Messages
    265
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 265
    Points : 108
    Points
    108
    Par défaut
    Merci bcp pour ton aide, je reviens vers toi si besoin est!

  4. #4
    Membre éprouvé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2009
    Messages
    736
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2009
    Messages : 736
    Points : 1 101
    Points
    1 101
    Par défaut
    1er requete
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select max(NumeroQuestion) from questions
    2eme requete
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    update questions set NumeroQuestion -= 1 where NumeroQuestion > "NumeroQuestionSupprimer"
    NumeroQuestion ne doit pas être auto incrémenter

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Août 2010
    Messages
    265
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 265
    Points : 108
    Points
    108
    Par défaut
    Je reviens juste pour dire que ça a marché parfaitement !


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $query_Recordset3 = "UPDATE question SET NumeroQuestion=NumeroQuestion-1 where questionnaire='".$_GET['questionnaire']."'AND NumeroQuestion>'".$_GET['NumeroQuestion']."'";
    J'ai juste rajouté une condition pour qu'il modifie bien les questions du questionnaire en question...

    Bref!
    Thx

  6. #6
    Membre émérite Avatar de Madfrix
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 326
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 326
    Points : 2 566
    Points
    2 566
    Par défaut
    Bonsoir,

    ta requête n'est pas sécurisée contre les injections SQL

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Août 2010
    Messages
    265
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 265
    Points : 108
    Points
    108
    Par défaut
    Bonjour,
    Ce que je fais est pour un projet PHP et on a aucune exigence particulière concernant la sécurité...
    Mais par curiosité, qu'est ce que tu aurais proposé pour éviter ceci ?

  8. #8
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 048
    Points
    34 048
    Billets dans le blog
    14
    Par défaut
    Utilise PDO et cache tes paramètres de requêtes.

  9. #9
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 048
    Points
    34 048
    Billets dans le blog
    14
    Par défaut
    Utilise PDO et cache tes paramètres de requêtes.

  10. #10
    Membre régulier
    Profil pro
    Inscrit en
    Août 2010
    Messages
    265
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 265
    Points : 108
    Points
    108
    Par défaut
    Merci , je vais regarder ça...

Discussions similaires

  1. Réponses: 8
    Dernier message: 03/04/2011, 01h45
  2. Requête SQL pour fusionner des colonnes
    Par Aenur56 dans le forum Langage SQL
    Réponses: 9
    Dernier message: 20/05/2010, 19h23
  3. Réponses: 2
    Dernier message: 15/02/2010, 01h07
  4. [MySQL] Requête SQL pour afficher des "Related Items"
    Par neoweiter dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 15/07/2009, 14h15
  5. [MySQL] Problème de requête SQL pour calculer des stats
    Par k2006 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 21/05/2009, 18h23

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo