Partage
  • Partager sur Facebook
  • Partager sur Twitter

Ajout de ligne dans une table en fonction d'une so

    20 mars 2018 à 16:00:26

    Bonjour,

    J'ai deux tables:
    Table1:
    id nombre
    1 10
    2 8
    3 14

    Table2:
    id table1_id

    Le but est de mettre dans table1_id l'id de la table1 en aléatoire (par exemple 221331231) et qu'il y est autant de ligne que la somme des nombres donc ici 32 lignes l'id de table2 est en autoincrement.
    Grace à :

    INSERT INTO Table2 (table1_id) SELECT id FROM Table1 ORDER BY RAND()

    J'arrive à copier l'id de table1 et les mettre aléatoirement dans table1_id mais je ne sais comment faire pour le faire sur 32 lignes par exemple. 
    Certainement avec un script php?

    Pouvez-vous m'aider s'il vous plait.

    -
    Edité par Dododec 20 mars 2018 à 16:20:35

    • Partager sur Facebook
    • Partager sur Twitter
      20 mars 2018 à 16:23:07

      Bonjour,

      Je pense que tu vas être obligé de passer par une procédure stockée et un curseur ou en effet un script PHP (mais ce sera plus lent) ...

      Mais peut-être vaut-il mieux d'abord se poser la question de pourquoi vouloir faire une telle chose ... ?

      • Partager sur Facebook
      • Partager sur Twitter
      Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
        20 mars 2018 à 16:39:34

        Plus concrètement avec des éleveurs de chien:


        Eleveur:
        id   nombre_chien
        1   10
        2   8
        3   14

        Chien:
        id Eleveur_id  Race Sante

        Le but est d'avoir une table chien qui regroupe les informations de chaque chien. Chaque id dans la table chien corresponds à 1 chien. Les autres information viennent d'une autre table. Il me faut donc autant d'id dans la table chien qu'il y a de chien dans la table éleveur.

        Peut être que la structure de ma base de donnée n'est pas bonne?

        • Partager sur Facebook
        • Partager sur Twitter
          20 mars 2018 à 16:46:55

          Je comprends mieux, et le modèle est cohérent, mais que vas-tu mettre comme valeur pour les colonnes race et santé ? Rien ?

          A mon avis, même si c'est faisable de créer une ligne par chien, tu n'échapperas pas à renseigner chaque chien unitairement pour mettre sa race et sa santé ...

          Côté MySQL tu peux faire :

          DELIMITER ;;
          CREATE PROCEDURE creer_chiens ()
          BEGIN
          	DECLARE termine INT DEFAULT FALSE;
          	DECLARE p_id, p_nombre INT DEFAULT 0;
          	DECLARE monCurseur CURSOR FOR SELECT id,nombre_chiens FROM eleveur;
          	DECLARE CONTINUE HANDLER FOR NOT FOUND SET termine = TRUE;
          	
          	OPEN monCurseur;
          	
          	maBoucle: LOOP
          		FETCH monCurseur INTO p_id, p_nombre;
          		IF termine THEN
          			LEAVE maBoucle;
          		
          		WHILE p_nombre > 0
          			INSERT INTO chien ( id_eleveur ) VALUES ( p_id );
          			
          			SET p_nombre = p_nombre - 1;
          		END WHILE;
          	END LOOP;
          	
          END;;
          DELIMITER ;

          Cela implique que les colonnes Race et Santé accepte le NULL.

          • Partager sur Facebook
          • Partager sur Twitter
          Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL

          Ajout de ligne dans une table en fonction d'une so

          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
          • Editeur
          • Markdown