Question

Je dois remplir un vide table avec une centaine de faux enregistrements à logins simulent au cours des deux dernières années pour tester mon code.

Le schéma de table de connexion ressemble à:

CREATE TABLE `Logins` (
  `ID` int(11) NOT NULL AUTO_INCREMENT,
  `User_ID` int(11) NOT NULL,
  `Date_Login` datetime NOT NULL,
  `Location` enum('site','admin') NOT NULL,
  PRIMARY KEY (`ID`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

Je suis vraiment nouveau à SQL en général, donc, je n'ai pas la moindre idée de ce que la requête devrait ressembler passé

INSERT INTO `Logins` (`User_ID`,`Date_Login`,`Location`) VALUES ...

Il me faut insérer les entrées N (permet de dire 100) en sorte que Logins

  • User_ID puise ses valeurs dans le champ de Users de table ID
  • Date_Login devrait être entre il y a 2 ans et maintenant
  • Location doit alterner entre 'site' et 'admin', mais avec 'site' plus fortement pondéré (disons 80% du temps).

Si tout va bien, je peux glaner quelques SQL-fu à l'aide à des problèmes similaires à l'avenir: D

Merci!

(j'utilise MySQL 5.1)

Était-ce utile?

La solution

Voici une instruction SQL pour insérer une seule ligne dans la table Logins. Vous pouvez exécuter ce à plusieurs reprises (par exemple dans une procédure stockée) pour obtenir plusieurs enregistrements. Vous devez exécuter plusieurs fois pour obtenir plusieurs enregistrements parce que si vous augmentez LIMIT 1 vous obtiendrez LIMIT 10 10 enregistrements, mais les valeurs de User_ID seront les mêmes pour chaque enregistrement.

INSERT INTO `Logins` (`User_ID`, `Date_Login`, `Location`)
SELECT
  users.ID AS `User_ID`,
  DATE_SUB(NOW(), INTERVAL FLOOR(1 + (RAND() * (365 * 2))) DAY) AS `Date_Login`,
  IF(RAND() > 0.8, 'admin', 'site') AS `Location`
FROM users
ORDER BY RAND()
LIMIT 1;

Normalement ORDER BY RAND() est mauvais style parce qu'il est inefficace, mais ce n'est pas une tâche sensible à la performance.

Autres conseils

Si vous souhaitez utiliser une solution SQL complète, voici comment vous pouvez créer une boucle: http://dev.mysql.com/doc/refman/5.1/en/iterate-statement.html Pour obtenir une date aléatoire, vous pouvez utiliser RAND () en combinaison avec +, * et quelques horodatages.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top