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

Langage SQL Discussion :

identifiant relatif en sql


Sujet :

Langage SQL

  1. #1
    Membre du Club
    Profil pro
    Webmaster
    Inscrit en
    Novembre 2006
    Messages
    158
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Novembre 2006
    Messages : 158
    Points : 57
    Points
    57
    Par défaut identifiant relatif en sql
    Bonjour,
    une question bête mais comment fait on des identifiants relatifs avc Mysql.

    J'ai une base de données sur des appartements et chaque appartement dispose de 10 photos max.

    Donc

    Par exemple mon appartement num 102 à des photos 1 2 3 4 5 6
    l'appartement 103 à des autres photos 1 2 3

    merci d'avance
    Jonathan

  2. #2
    Membre émérite

    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 683
    Points : 2 579
    Points
    2 579
    Par défaut
    MySQL ne gère pas l'identifiant relatif comme tu le souhaiterais (un auto incrément à la fin d'une clé primaire composée).

    Il faut traiter ça à la main en utilisant une table transactionnelle InnoDB pour être sûr du bon fonctionnement de ton mécanisme de génération d'identifiant relatif.

    Inspire toi du très bon article d'SQLPro : http://sqlpro.developpez.com/cours/clefs/

    Il faudra que tu l'adaptes car il traite de la génération d'un Id Auto par table. Dans ton cas il s'agit d'un Id Auto étant la partie "faible" de ta clé composée.

  3. #3
    Membre du Club
    Profil pro
    Webmaster
    Inscrit en
    Novembre 2006
    Messages
    158
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Novembre 2006
    Messages : 158
    Points : 57
    Points
    57
    Par défaut
    Je t'explique vite fait pourquoi je voudrais utiliser un identifiant relatif peu être je peux contourner ça.

    En fait, dans mon administration quand je vais sur une fiche d'un appartement, je vois les photos associées.

    En gros, j'ai les photos et à côté de chaque photo un case à cocher.

    Par exemple, je coche 3 cases (donc 3 photos), il faut maintenant les supprimer de ma base.

    J'avais fait une boucle pour le nom de chaque check comme cela

    $result2[0] étant la clef primaire de chaque photo.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <input type="checkbox" name="check'.$result2[0].'" value="'.$result2[0].'">
    Une fois valider je fais un test de quelle case a été coché :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    for ($i=1; $i<11; $i++) 
       {
    	  if (!empty($_POST["check".$i.""]))
    	  { 
    	    $req = mysql_query("DELETE FROM PHOTO WHERE ref_lieu = '".$_GET['id_lieu']."' AND num_photo = ".$i);
          }
       }
    Si on la trouve, on la supprimer.
    Je faisais donc un test de 1 à 10 élément vu qu'un appartement peut avoir 10 photo max et que je pensais pouvoir faire un identifiant relatif.

    Voilà voilà
    j'espere que je me suis exprimé clairement

  4. #4
    Membre émérite

    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 683
    Points : 2 579
    Points
    2 579
    Par défaut
    Je ne vois pas en quoi l'énoncé de ton probèmle concerne les identifiants relatifs. Tu as certes ID_APPARTEMENT, ID_PHOTO pour ta table PHOTO_APPARTEMENT, mais ton problème de sélection dans une page web ne relève pas du SQL.

    Si dans ta page de sélection, tu dipose de l'id appartement et id_photo, tu n'as qu'à supprimer tout ce qui est coché.

  5. #5
    Membre du Club
    Profil pro
    Webmaster
    Inscrit en
    Novembre 2006
    Messages
    158
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Novembre 2006
    Messages : 158
    Points : 57
    Points
    57
    Par défaut
    oui c'est vrai mais est il possible de faire une seule requete pour supprimer par exemple 3 photos ?

    on va devoir faire un teste de ce qui a été coché et non ?

    Je ne vois vraiment pas comment faire pour ça vu que je génére des checks

    certaines maisons peuvent avoir 4 photos comme 10 photos
    je génére le nom des photos "check"+ le num de la photos dans la bdd.

    par methode POST j'aurais bien toutes les cases cochées. Bon jusque là pas de soucis.

    C'est pour créer ma requete que ça se complique.
    Comment savoir que j'aurais coché 2 ou 9 cases pour ma requete ?
    Faire une requete à rallonge ? faire des tests ?

  6. #6
    Membre émérite

    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 683
    Points : 2 579
    Points
    2 579
    Par défaut
    Tu peux le faire en une requête avec :

    - ... where id_photo = x or id_photo = y or ...
    ou
    - ... where id_photo in (x, y, ...) > attention si aucune sélection ça sera une erreur sql.

    Dans tous les cas ta base de données doit savoir quels id photo supprimer, tu ne peux rien y faire. Ca relève de la partie applicative.

  7. #7
    Membre du Club
    Profil pro
    Webmaster
    Inscrit en
    Novembre 2006
    Messages
    158
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Novembre 2006
    Messages : 158
    Points : 57
    Points
    57
    Par défaut
    ça n'irait pas plus vite de faire une requete genre

    SELECT MAX(num_photo) FROM photo

    pour i de 1 à MAX
    si i = $_POST['i'] alors
    supprimer la photo
    fin si
    fin pour

    EN GROS hein

  8. #8
    Membre du Club
    Profil pro
    Webmaster
    Inscrit en
    Novembre 2006
    Messages
    158
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Novembre 2006
    Messages : 158
    Points : 57
    Points
    57
    Par défaut
    ça fonctionne nikel ce systeme

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MCD] Définition 'lien identifiant' & 'identifiant relatif'
    Par knoxville dans le forum Schéma
    Réponses: 14
    Dernier message: 19/03/2011, 01h27
  2. Probleme Identifiant Relatif
    Par agrosjea dans le forum Modélisation
    Réponses: 1
    Dernier message: 18/01/2008, 23h17
  3. Identifiant relatif PowerDesigner
    Par moumoune65 dans le forum PowerAMC
    Réponses: 1
    Dernier message: 29/08/2007, 19h57
  4. [Identifiant relatif] access
    Par Fredo02 dans le forum Access
    Réponses: 1
    Dernier message: 19/01/2006, 21h14
  5. Générer un identifiant relatif > l'entité faible en prati
    Par vmolines dans le forum Décisions SGBD
    Réponses: 1
    Dernier message: 19/08/2005, 15h59

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