2010-06-29 3 views
3

J'ai besoin de remplir une table actuellement vide avec une centaine de faux enregistrements pour simuler des connexions au cours des deux dernières années pour tester mon code.Une requête SQL rapide pour générer des données d'exemple

Le schéma de la 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 ... 

ce que je dois insérer des entrées est N (permet de dire 100) en Logins de sorte que

  • User_ID puise ses valeurs dans le champ de la table UsersID
  • Date_Login devrait être entre il y a 2 ans et maintenant
  • Location devrait 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 pour aider à des problèmes similaires à l'avenir: D

Merci!

(J'utilise MySQL 5.1)

Répondre

2

Voici une instruction SQL permettant d'insérer une seule ligne dans la table Logins. Vous pouvez l'exécuter plusieurs fois (par exemple dans une procédure stockée) pour obtenir plusieurs enregistrements. Vous devez l'exécuter plusieurs fois pour obtenir plusieurs enregistrements car si vous augmentez LIMIT 1 à LIMIT 10, vous obtiendrez 10 enregistrements mais les valeurs 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.

Questions connexes